1 开启springboot的定时任务
使用注解@EnableScheduling开启,代码:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class JobApplication {
public static void main(String[] args) {
SpringApplication.run(JobApplication.class, args);
}
}
2 创建定时任务
创建一个定时任务类,该类要求加上@Service 或者 @Component 注解让框架容器管理。
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class MyScheduledTask {
@Scheduled(fixedRate = 5000) // 每隔5秒执行一次
public void myTask() {
System.out.println("定时任务执行:" + System.currentTimeMillis());
// 这里是任务逻辑
}
//每1分钟运行一次
@Scheduled(cron = "0 0/1 * * * ?")
public void task() {
// 执行任务
}
}
注意,以上定时任务执行是同步执行的,即假设在一个定时执行任务时间中,而另一个定时任务到了时间也不会运行。
3 开启springboot异步定时任务
需用到 @EnableAsync 注解开启异常定时任务
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableAsync
public class JobApplication {
public static void main(String[] args) {
SpringApplication.run(JobApplication.class, args);
}
}
4 创建异步定时任务
需要用到@Async注解,如代码:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class MyScheduledTask {
@Async
@Scheduled(fixedRate = 5000) // 每隔5秒执行一次
public void myTask() {
System.out.println("定时任务执行:" + System.currentTimeMillis());
// 这里是任务逻辑
}
//每1分钟运行一次
@Async
@Scheduled(cron = "0 0/1 * * * ?")
public void task() {
// 执行任务
}
}