1. 程式人生 > >使用spring提供的@Scheduled註解創建定時任務

使用spring提供的@Scheduled註解創建定時任務

cronjob time -i tro 返回值 bean tor 執行 使用

使用方法

操作非常簡單,只要按如下幾個步驟配置即可

1. 導入jar包或添加依賴,其實定時任務只需要spring-context即可,當然起服務還需要spring-web;

2. 編寫定時任務類和方法,在方法上加@Scheduled註解,註意定時方法不能有返回值,如果采用包掃描方式註冊bean,還需要在類上加組件註解;

3. 在spring容器中註冊定時任務類;

4. 在spring配置文件中開啟定時功能。

示例Demo

maven依賴

<dependency>
  <groupId>org.springframework</groupId
> <artifactId>spring-context</artifactId> <version>5.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.1.6.RELEASE</version
> </dependency>

定時任務類

@Component(value = "scheduleJob")
public class ScheduleJob {

    /**
     * 固定間隔時間執行任務,單位為微秒
     */
    @Scheduled(fixedDelay = 2000)
    public void timeJob() {
        System.out.println("2s過去了......");
    }

    /**
     * 使用cron表達式設置執行時間
     */
    @Scheduled(cron 
= "*/5 * * * * ?") public void cronJob() { System.out.println("cron表達式設置執行時間"); } }

spring配置文件——註冊定時任務類,或將定時任務類所在的包掃描進去

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!--掃描指定包下加了組件註解的bean-->
    <context:component-scan base-package="cn.monolog.diana.schedule" />

</beans>

spring配置文件——開啟定時功能

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/task
       http://www.springframework.org/schema/task/spring-task.xsd">

    <!--開啟定時功能-->
    <task:executor id="executor" pool-size="10" queue-capacity="128" />
    <task:scheduler id="scheduler" pool-size="10" />
    <task:annotation-driven executor="executor" scheduler="scheduler" />

</beans>

啟動服務後,控制臺會輸出如下語句

2s過去了......
2s過去了......
cron表達式設置執行時間
2s過去了......
2s過去了......
2s過去了......
cron表達式設置執行時間
2s過去了......
2s過去了......

指定定時任務執行時間的方式

從上面的demo可以看出,定時任務的執行時間主要有兩種設置方式:

1. 使用@Scheduled註解的fixedDelay屬性,只能指定固定間隔時長;

2. 使用@Scheduled註解的cron屬性,可以指定更豐富的定時方式。

那麽問題來了,這個cron表達式該怎麽寫?

使用spring提供的@Scheduled註解創建定時任務