溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中的@Scheduled功能怎么使用

發布時間:2022-04-08 15:17:59 來源:億速云 閱讀:386 作者:iii 欄目:開發技術

這篇文章主要介紹“Spring中的@Scheduled功能怎么使用”,在日常操作中,相信很多人在Spring中的@Scheduled功能怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring中的@Scheduled功能怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    一、Spring @Scheduled Annotation

    @ scheduled注釋用于任務調度。觸發器信息需要與這個注釋一起提供。

    您可以使用屬性 fixedDelay/fixedRate/cron 來提供觸發信息。

    • fixedRate 使 Spring 定期運行任務,即使最后一次調用仍在運行

    • fixedDelay 特別控制最后一次執行結束時的下一次執行時間。

    • Cron 是一個源自 Unix cron 實用工具的特性,并且根據您的需求有各種選項。

    示例用法如下:

    @Scheduled Usages
    @Scheduled(fixedDelay =30000)
    public void demoServiceMethod () {... }
     
    @Scheduled(fixedRate=30000)
    public void demoServiceMethod () {... }
     
    @Scheduled(cron="0 0 * * * *")
    public void demoServiceMethod () {... }

    1.2 如何啟用@Scheduled 注釋

    要在 spring 應用程序中使用@Scheduled,必須首先在 applicationConfig.xml 文件中定義 xml 名稱空間和模式位置定義。還添加任務: 注釋驅動,以支持基于注釋的任務調度。

    applicationConfig.xml
    xmlns:task="http://www.springframework.org/schema/task"
    http://www.springframework.org/schema/task/
    http://www.springframework.org/schema/task/spring-task-3.0.xsd
     
    <task:annotation-driven>

    上面的添加是必要的,因為我們將使用基于注釋的配置。

    1.3 使用@Scheduled 注釋

    下一步是在類中創建一個類和一個方法,如下所示:

    DemoService.java
    public class DemoService
    {
      @Scheduled(cron="*/5 * * * * ?")
      public void demoServiceMethod()
      {
        System.out.println("Method executed at every 5 seconds. Current time is :: "+ new Date());
      }
    }

    在上面的例子中

    • 使用@Scheduled 注釋反過來會使 Spring 容器理解這個注釋下面的方法將作為作業運行。

    • 記住,帶@Scheduled 注釋的方法不應該有傳遞給它們的參數。

    • 它們也不應該返回任何值

    • 如果希望在@Scheduled 方法中使用外部對象,應該使用自動連接將它們注入到 DemoService 類中,而不是將它們作為參數傳遞給@Scheduled 方法。

    二、固定的延時和頻率使用@Scheduled

    在這個方法中,fixedDelay 屬性與@Scheduled 注釋一起使用。

    舉例:

    DemoServiceBasicUsageFixedDelay.java
    package com.howtodoinjava.service;
     
    import java.util.Date;
    import org.springframework.scheduling.annotation.Scheduled;
     
    public class DemoServiceBasicUsageFixedDelay
    {
     &nbsp;@Scheduled(fixedDelay = 5000)
     &nbsp;//@Scheduled(fixedRate = 5000)  //Or use this
     &nbsp;public void demoServiceMethod()
      {
     &nbsp; &nbsp;System.out.println("Method executed at every 5 seconds. Current time is :: "+ new Date());
      }
    }

    應用程序配置如下:

    applicationContext.xml
    < ?xml  version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:task="http://www.springframework.org/schema/task"
     xmlns:util="http://www.springframework.org/schema/util"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context/ http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/util/ http://www.springframework.org/schema/util/spring-util.xsd
            http://www.springframework.org/schema/task/ http://www.springframework.org/schema/task/spring-task-3.0.xsd">
        <task:annotation-driven />
        <bean id="demoServiceBasicUsageFixedDelay" class="com.howtodoinjava.service.DemoServiceBasicUsageFixedDelay"></bean>
    </beans>

    三、配合cron表達式使用@Scheduled

    在此方法中,cron 屬性與@Scheduled 注釋一起使用。

    舉例:

    DemoServiceBasicUsageCron.java
    package com.howtodoinjava.service;
    import java.util.Date;
    import org.springframework.scheduling.annotation.Scheduled;
    public class DemoServiceBasicUsageCron
    {
      @Scheduled(cron="*/5 * * * * ?")
      public void demoServiceMethod()
      {
        System.out.println("Method executed at every 5 seconds. Current time is :: "+ new Date());
      }
    }

    應用程序配置如下:

    applicationContext.xml
    < ?xml  version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:task="http://www.springframework.org/schema/task"
     xmlns:util="http://www.springframework.org/schema/util"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context/ http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/util/ http://www.springframework.org/schema/util/spring-util.xsd
            http://www.springframework.org/schema/task/ http://www.springframework.org/schema/task/spring-task-3.0.xsd">
        <task:annotation-driven />
        <bean id="demoServiceBasicUsageCron" class="com.howtodoinjava.service.DemoServiceBasicUsageCron"></bean>
    </beans>

    四、使用properties文件配置Cron

    在這個方法中,cron 屬性與@Scheduled 注釋一起使用。此屬性的值必須是 cron 表達式,如前面的方法所示,但是,此 cron 表達式將在屬性文件中定義,相關屬性的鍵將用于@Scheduled 注釋。

    這將使 cron 表達式與源代碼分離,從而使更改變得容易。

    DemoServicePropertiesExample.java
    package com.howtodoinjava.service;
    import java.util.Date;
    import org.springframework.scheduling.annotation.Scheduled;
    public class DemoServicePropertiesExample {
      @Scheduled(cron = "${cron.expression}")
      public void demoServiceMethod()
      {
        System.out.println("Method executed at every 5 seconds. Current time is :: "+ new Date());
      }
    }

    應用程序配置如下:

    applicationContext.xml
    <?xml  version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:task="http://www.springframework.org/schema/task"
     xmlns:util="http://www.springframework.org/schema/util"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context/ http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/util/ http://www.springframework.org/schema/util/spring-util.xsd
            http://www.springframework.org/schema/task/ http://www.springframework.org/schema/task/spring-task-3.0.xsd">
        <task:annotation-driven />
        <util:properties id="applicationProps" location="application.properties" />
      <context:property-placeholder properties-ref="applicationProps" />
        <bean id="demoServicePropertiesExample" class="com.howtodoinjava.service.DemoServicePropertiesExample"></bean>
    </beans>

    五、使用context配置Cron

    該方法在屬性文件中配置 cron 表達式,在配置文件中使用 cron 表達式的屬性鍵配置作業調度。主要的變化是您不需要在任何方法上使用@Scheduled 注釋。方法配置也是在應用程序配置文件中完成的。

    舉例:

    DemoServiceXmlConfig.java
    package com.howtodoinjava.service;
    import java.util.Date;
    public class DemoServiceXmlConfig
    {
      public void demoServiceMethod()
      {
        System.out.println("Method executed at every 5 seconds. Current time is :: "+ new Date());
      }
    }

    應用程序配置如下:

    applicationContext.xml
    <?xml  version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:task="http://www.springframework.org/schema/task"
     xmlns:util="http://www.springframework.org/schema/util"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context/ http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/util/ http://www.springframework.org/schema/util/spring-util.xsd
            http://www.springframework.org/schema/task/ http://www.springframework.org/schema/task/spring-task-3.0.xsd">
        <task:annotation-driven />
        <util:properties id="applicationProps" location="application.properties" />
      <context:property-placeholder properties-ref="applicationProps" />
      <bean id="demoServiceXmlConfig" class="com.howtodoinjava.service.DemoServiceXmlConfig" />
      <task:scheduled-tasks>
          <task:scheduled ref="demoServiceXmlConfig" method="demoServiceMethod" cron="#{applicationProps['cron.expression']}"></task:scheduled>
      </task:scheduled-tasks>
    </beans>

    到此,關于“Spring中的@Scheduled功能怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女