1SpringBoot集成定时任务
1.依赖只需要parent 和web
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.配置信息,配置定时任务线程数防止一个任务阻塞导致其他定时任务无法执行!! https://www.javazhiyin.com/61822.html
#设置定时任务线程数10 默认是1,一旦有一个任务阻塞,那么其他定时任务都无法执行
spring.task.scheduling.pool.size=10
#定时任务前缀
spring.task.scheduling.thread-name-prefix=task-test
2.测试类
@Component
public class ScheduledTest {
public final static String CRONS="* * * * * ?"; //每秒执行一次
@Scheduled(cron = CRONS)
public void test(){
System.out.println("######>>>>"+new Date()+"哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈");
}
}
3.启动类开启定时任务注解
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
4.结果
######>>>>Wed Apr 24 09:37:07 CST 2019哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
######>>>>Wed Apr 24 09:37:08 CST 2019哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
######>>>>Wed Apr 24 09:37:09 CST 2019哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
######>>>>Wed Apr 24 09:37:10 CST 2019哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
######>>>>Wed Apr 24 09:37:11 CST 2019哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
2.配合数据库动态执行任务
1.建表
CREATE TABLE `cron` (
`cron_id` varchar(30),
`cron` varchar(30)
);
INSERT INTO `cron` VALUES ('1', '0/5 * * * * ?');
2.
@Configuration
@EnableScheduling
public class CompleteScheduleConfig implements SchedulingConfigurer {
@Autowired
private MemberMapper memberMapper;
/**
* 执行定时任务.
*/
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//方式一
taskRegistrar.addTriggerTask(
new Runnable() {
@Override
public void run() {
System.out.println("正在执行任务:"+LocalDateTime.now().toLocalTime());
}
},
triggerContext -> {
//2.1 从数据库获取执行周期
String cron = memberMapper.getCron();
//2.2 合法性校验.
if (StringUtils.isEmpty(cron)) {
// Omitted Code ..
}
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
// 结果 正在执行任务:16:51:40.003
// 正在执行任务:16:51:50.001
// 正在执行任务:16:51:55.002
// 正在执行任务:16:52:00.001
//方式二 表达式
// taskRegistrar.addTriggerTask(
// //1.添加任务内容(Runnable)
// () -> System.out.println("执行定时任务2: " + LocalDateTime.now().toLocalTime()),
// //2.设置执行周期(Trigger)
// triggerContext -> {
// //2.1 从数据库获取执行周期
// String cron = memberMapper.getCron();
// //2.2 合法性校验.
// if (StringUtils.isEmpty(cron)) {
// // Omitted Code ..
// }
// //2.3 返回执行周期(Date)
// return new CronTrigger(cron).nextExecutionTime(triggerContext);
// }
// );
}
}
3.