【SpingBoot学习笔记】SpingBoot之定时任务(Scheduled注解方式)
1.使用场景
通常用来实现一些需要在后台运行的业务操作,数据同步,权限体系中并发数控制,缓存清理,数据备份等,日常项目中遇到的比较多的就是系统集成,定期将某个业务数据同步到另外一个系统,就会用到定时任务
2.实现方式
基于注解(@Scheduled): 基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响;
3.代码实现
创建maven项目scheduled_task,项目结构如下
pom文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.test</groupId> 8 <artifactId>scheduled_task</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <!--手动引入--> 12 <parent> 13 <groupId>org.springframework.boot</groupId> 14 <artifactId>spring-boot-starter-parent</artifactId> 15 <version>1.3.3.RELEASE</version> 16 </parent> 17 18 19 <!--手动引入--> 20 <dependencies> 21 <dependency> 22 <groupId>org.springframework.boot</groupId> 23 <artifactId>spring-boot-starter-web</artifactId> 24 </dependency> 25 </dependencies> 26 27 <!--手动引入--> 28 <build> 29 <plugins> 30 <plugin> 31 <groupId>org.springframework.boot</groupId> 32 <artifactId>spring-boot-maven-plugin </artifactId> 33 </plugin> 34 </plugins> 35 </build> 36 37 38 </project>
创建启动类,ScheduledTaskSpringBootApplication.java
1 package com.test; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.scheduling.annotation.EnableScheduling; 6 7 @SpringBootApplication 8 9 public class ScheduledTaskSpringBootApplication { 10 public static void main(String [] args){ 11 SpringApplication.run(ScheduledTaskSpringBootApplication.class,args); 12 } 13 }
创建定时任务类,MyScheduleConfig.java
1 package com.test.task; 2 3 import org.apache.log4j.Logger; 4 import org.springframework.context.annotation.Configuration; 5 import org.springframework.scheduling.annotation.EnableScheduling; 6 import org.springframework.scheduling.annotation.Scheduled; 7 8 @Configuration 9 @EnableScheduling 10 public class MyScheduleConfig { 11 12 private Logger logger = Logger.getLogger(getClass()); 13 @Scheduled(cron = "* * * * * ?") // 定义调度器 14 public void job1() { 15 logger.info("【定时任务1】已执行,时间:"+System.currentTimeMillis()); 16 } 17 }
启动项目,运行正常,执行结果如下
多个定时任务时,增加新的定时任务类,MyScheduleConfig1
package com.test.task; import org.apache.log4j.Logger; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; @Configuration public class MyScheduleConfig1 { private Logger logger = Logger.getLogger(getClass()); @Scheduled(cron = "* * * * * ?") // 定义调度器 public void job1() { logger.info("【定时任务2】已执行,时间:"+System.currentTimeMillis()); } }
重新启动,运行结果如下
可以看到,定时任务在交替执行,并没有什么优先顺序,因为是单线程,一个执行完了才能执行另外一个,需注意
4.其他说明
整个项目只需要配置一个@EnableScheduling即可,可以放在定时任务的类上,也可以放在启动类上,多个任务时,也只需要配置一个(个人建议,加在启动类上)。
PS:停止更新了一段时间,七月底结了个婚,以及其他好多好多的事要处理,赶上大西安两波疫情,天气热,状态也不好,压力蛮大,焦虑等等,总之,大龄程序员终于结婚了,欠了一些债,以后得好好上班还债和养家糊口了,到年底的目标就是把外债还完。
本文来自博客园,作者:泠雨0702,转载请注明原文链接:https://www.cnblogs.com/lingyu0702/p/16623359.html