前言
用Spring-Context组件实现简易的定时任务功能。只可以支持较简单的业务场景,实用价值不高。如果想要投放到生产环境,需要进行一些改造。
步骤
1. pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2. 创建一个启动类
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
注意,@EnableScheduling是关键,加了这个注解才能启动定时任务。
3. 编写定时任务方法
可以实现两种定时,一种是每个一段时间执行一次方法(fixedRated),另一种是执行一次方法之后间隔若干时间后再执行下一次(fixedDelay)。
@Component
public class DemoTasks {
@Scheduled(fixedRate = 5000)
public void doSomethingEvery5Seconds() {
System.out.println("fixedRate 5sec task executed");
}
@Scheduled(fixedDelay = 3000)
public void doSomethingAndSleep2Seconds() {
System.out.println("fixedDelay 2sec task start");
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("fixedDelay 2sec task end");
}
}