一、spring中通过配置文件方式实现定时任务
Spring3.0以后自带有定时任务的实现功能:
一、修改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/task
- http://www.springframework.org/schema/task/spring-task-3.0.xsd">
- <task:annotation-driven /> //支持注解
二、写对应程序执行时间的配置文件:创建一个task.properties配置文件,内容如下
- jobs.schedule.task1=0/10 * * * * ? //每十秒执行一次
- jobs.schedule.task2=0 40 * * * ? //每个小时的四十分执行一次
- jobs.schedule.task3=0 30 4 * * ? //每天的四点半执行一次
- jobs.schedule.task4=0 0/50 * * * ? //每五十分钟执行一次
更多时间的设置自行百度
三、对应定时任务执行类
- @PropertySource("classpath:task.properties")
- @Component
- public class test{
- @Bean
- public static PropertySourcesPlaceholderConfigurer propertyConfigInDev()
- {
- return new PropertySourcesPlaceholderConfigurer(); //加上之后spring才能识别${}中的内容
- }
- @Value("${jobs.schedule.task2}")
- public String abc; //此时abc的内容为:0 40 * * * ?
- @Scheduled(cron = "${jobs.schedule.task1}" ) //定义十秒执行一次
- public void task(){
- System.out.println("每十秒输出一次该语句");
- }
- }
二、springboot 定时任务的使用
1、pom 包配置
引入 spring-boot-starter 依赖,其实springboot项目中很多包有依赖到它。
2、启动类添加启动定时配置
在启动类(Application)上面加上 @EnableScheduling
注解即可开启定时
3、创建定时任务实现类
@Component
public class SchedulerTask {
@Scheduled(cron="*/7 * * * * ?")
private void test1(){
System.out.println("7秒执行一次test1定时任务");
}
@Scheduled(fixedRate = 5000)
private void test2(){
System.out.println("5秒执行一次test2定时任务");
}
}
说明
@Scheduled
注解可以设置cron、fixedRate两种方式,见上面两个定时任务。
其中cron的设置可以见最上面的说明,fixedRate的设置说明如下:
-
@Scheduled(fixedRate=6000)
:上一次开始执行时间点之后6秒再执行,这里是上次任务执行开始时间 -
@Scheduled(fixedDelay=6000)
:上一次执行完毕时间点之后6秒再执行,这里是上次任务执行结束之后 -
@Scheduled(initialDelay=1000,fixedRate=6000)
:第一次延迟1秒后执行,之后按 fixedRate 的规则每6秒执行一次