Schedule定时任务器

schedule定时任务器,是spring3.0以后自带的一个定时任务器

springboot中配置

pom.xml

1
2
3
4
5
<!-- 添加 Scheduled 坐标 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>

任务类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package cn.job;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class MyScheduledTask {

@Scheduled(cron = "0/5 * * * * ?")
public void MyScheduledTask(){
System.out.println("定时器被触发"+new Date());
}

}

启动类

1
2
3
4
5
6
7
@SpringBootApplication
@EnableScheduling
public class APP {
public static void main(String[] args) {
SpringApplication.run(APP.class, args);
}
}

spring配置

一些没有入口类的项目,就比较适合了

配置方式1

TaskSchedulingConfig 中调用 taskRegistrar.addCronTask(() -> myScheduledTask.scheduleMethod(), "0/5 * * * * ?"); 的方式,将定时任务的触发逻辑交给 taskRegistrar 来管理。这种方式更加灵活,可以在 TaskSchedulingConfig 中配置多个定时任务,并且可以根据需要动态添加或移除定时任务。这种方式适用于需要对定时任务进行动态管理的场景,例如根据用户设置动态调整定时任务的执行时间或频率。

任务类

1
2
3
4
5
6
7
8
@Component
public class MyScheduledTask {

//每5秒执行一次
public void scheduleMethod(){
System.out.println("\n===============定时器被触发==================\n"+new Date());
}
}

配置类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
@EnableScheduling
public class TaskSchedulingConfig implements SchedulingConfigurer {

@Autowired
private MyScheduledTask myScheduledTask;

@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// 进行任务调度的配置
taskRegistrar.addCronTask(myScheduledTask::scheduleMethod,"0/2 * * * * ?");
//taskRegistrar.addCronTask(() -> myScheduledTask.scheduleMethod(), "0/2 * * * * ?")
}
}

配置方式2

MyScheduledTask 类上使用 @Scheduled(cron = "0/2 * * * * ?") 的方式,直接在类内部定义定时任务的触发逻辑。这种方式更加简单,适用于只有一个定时任务或者不需要动态管理定时任务的场景。

任务类

1
2
3
4
5
6
7
@Component
public class MyScheduledTask {

public void scheduleMethod(){
System.out.println("\n===============定时器被触发==================\n"+new Date());
}
}

配置类

1
2
3
4
5
6
7
8
9
10
11
12
@Configuration
@EnableScheduling
public class TaskSchedulingConfig {

@Autowired
private MyScheduledTask myScheduledTask;

@Scheduled(cron = "0/2 * * * * ?")
public void configureTasks() {
myScheduledTask.scheduleMethod();
}
}