SpringBoot-Scheduling àì夳堔傛蜴生んèń 2022-02-18 10:29 182阅读 0赞 # 前言 # 在 SpringBoot 中使用定时任务非常简单,因为 SpringBoot 已经集成好了相关类。 # 源码 # GitHub地址:[https://github.com/intomylife/SpringBoot][https_github.com_intomylife_SpringBoot] # 环境 # * JDK 1.8.0 + * Maven 3.0 + * SpringBoot 2.0.3 # 开发工具 # * IntelliJ IDEA # 正文 # ### commons 工程 - POM 文件 ### <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 三坐标 --> <groupId>com.zwc</groupId> <artifactId>springboot-scheduling-commons</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 工程名称和描述 --> <name>springboot-scheduling-commons</name> <description>公用工程</description> <!-- 在properties下声明相应的版本信息,然后在dependency下引用的时候用${spring-version}就可以引入该版本jar包了 --> <properties> <!-- 编码 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- jdk --> <java.version>1.8</java.version> <!-- springboot --> <platform-bom.version>Cairo-SR3</platform-bom.version> <!-- ali json --> <fastjson.version>1.2.47</fastjson.version> </properties> <!-- 加入依赖 --> <dependencies> <!-- ali json 依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> </dependencies> <!-- 依赖 jar 包版本管理的管理器 --> <!-- 如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven 就此处来找版本声明。 --> <!-- 如果有,就会继承它;如果没有就会报错,告诉你没有版本信息 --> <!-- 优先级:如果 dependencies 里的 dependency 已经声明了版本信息,就不会生效此处的版本信息了 --> <dependencyManagement> <dependencies> <!-- SpringBoot --> <dependency> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>${platform-bom.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 插件依赖 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> * SpringBoot 的最基础配置 ### commons 工程 - 项目结构 ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDAyMjAw_size_16_color_FFFFFF_t_70][] ### service 工程 ### > **service 工程是一个父工程,里面可能会包含 基础模块,用户模块,订单模块等等... 每个模块中又会分为 core 和 api** ### service 工程 - base-service-core - 定时任务类 ### **SchedulerFixed** package com.zwc.base.scheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.Date; /** * @ClassName SchedulerFixed * @Desc TODO 定时任务 - 指定秒 * @Date 2019/4/16 21:26 * @Version 1.0 */ @Service public class SchedulerFixed { // 时间格式化 private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /* * @ClassName SchedulerFixed * @Desc TODO 上一次开始执行时间点之后 3 秒再执行 * @Date 2019/4/16 21:28 * @Version 1.0 */ @Scheduled(fixedRate = 3000) public void fixedRate(){ System.out.println("SchedulerFixed ---> fixedRate() 方法执行了:" + sdf.format(new Date())); } /* * @ClassName SchedulerFixed * @Desc TODO 上一次执行完毕时间点之后 6 秒再执行 * @Date 2019/4/16 21:32 * @Version 1.0 */ @Scheduled(fixedDelay = 6000) public void fixedDelay(){ System.out.println("SchedulerFixed ---> fixedDelay() 方法执行了:" + sdf.format(new Date())); } /* * @ClassName SchedulerFixed * @Desc TODO 第一次延迟 10 秒后执行,之后每一次都按每 1 秒执行一次 * @Date 2019/4/16 21:35 * @Version 1.0 */ @Scheduled(initialDelay = 10000 , fixedRate = 1000) public void initialDelayAndFixedRate(){ System.out.println("SchedulerFixed ---> initialDelayAndFixedRate() 方法执行了:" + sdf.format(new Date())); } } * 使用 @Scheduled 注解设置定时任务 * 此类配置的指定秒数后执行定时任务 **SchedulerCron** package com.zwc.base.scheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.Date; /** * @ClassName SchedulerCron * @Desc TODO 定时任务 - 表达式 * @Date 2019/4/16 21:37 * @Version 1.0 */ @Service public class SchedulerCron { // 时间格式化 private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /* * @ClassName SchedulerCron * @Desc TODO 上一次开始执行时间点之后 15 秒再执行 * @Date 2019/4/16 21:45 * @Version 1.0 */ @Scheduled(cron = "*/15 * * * * ?") public void cron(){ System.out.println("SchedulerCron ---> cron() 方法执行了:" + sdf.format(new Date())); } /* * @ClassName SchedulerCron * @Desc TODO 明确指定一个时间点执行,配置格式为:[秒] [分] [小时] [日] [月] [周] [年] * @Date 2019/4/17 10:58 * @Version 1.0 */ @Scheduled(cron = "0 0 11 * * ?") public void cronTimePoint(){ System.out.println("SchedulerCron ---> cronTimePoint() 方法执行了:" + sdf.format(new Date())); } } * 使用 @Scheduled 注解设置定时任务 * 此类配置的表达式来执行定时任务 * 方法 cron() 设置的 '每隔 15 秒' 执行一次定时任务 * 方法 cronTimePoint() 设置的 '每天 11 点' 执行一次定时任务 ### service 工程 - base-service-core - 启动类 ### package com.zwc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; /* * @ClassName SpringbootSchedulingBaseServiceCoreApplication * @Desc TODO SpringBoot 启动类 * @Date 2019/4/16 21:07 * @Version 1.0 */ @SpringBootApplication @EnableScheduling public class SpringbootSchedulingBaseServiceCoreApplication { public static void main(String[] args) { SpringApplication.run(SpringbootSchedulingBaseServiceCoreApplication.class, args); } } * 使用 @EnableScheduling 注解开启定时任务 ### 启用项目,观察控制台 ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDAyMjAw_size_16_color_FFFFFF_t_70 1][] 1. 项目启动完毕后,定时任务开始执行 2. fixedRate() 方法和 fixedDelay() 方法先执行一次 3. 每隔三秒,执行一次 fixedRate() 4. 每隔六秒,执行一次 fixedDelay() 5. 项目启动成功后的十秒,开始执行 initialDelayAndFixedRate() 方法,之后每隔一秒执行一次 6. 项目启动成功后的十五秒,开始执行 cron() 方法,之后每隔十五秒执行一次 7. 因为当前时间已经过了十一点,所以 cronTimePoint() 方法今天不会执行了,之后的每天十一点执行一次 ### service 工程 - 项目结构 ### ![20190417122418512.png][] * 在 service 总工程中创建了一个 base-service 的基础模块 * 每一个模块中都包含 api 和 core ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDAyMjAw_size_16_color_FFFFFF_t_70 2][] * api:主要包含接口,常量以及实体类的扩展类 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDAyMjAw_size_16_color_FFFFFF_t_70 3][] * core:带有启动类的工程,此模块的核心代码都在里面 ### 把多工程项目使用 IntelliJ IDEA 打开 ### 1. 把项目从 GitHub 中下载到你的本地 2. 打开 IntelliJ IDEA 3. 点击 File -> Open 4. 打开你下载到本地的项目目录 5. springboot-scheduling -> springboot-scheduling-service(选择打开此工程) 6. 打开 service 工程后 7. 再次点击 File -> Project Structrue 8. 选择 Modules,点击 '+' 符号 9. 点击 Import Module 10. 还是打开你下载到本地的项目目录 11. springboot-scheduling -> springboot-scheduling-commons -> pom.xml 12. 点击 OK 13. 点击 Next,Finish 14. 点击 Apply,OK -------------------- # 结语 # 到此 SpringBoot 中使用 Scheduling 就结束了,多多尝试,一定会成功的! 希望能够帮助到你 over [https_github.com_intomylife_SpringBoot]: https://github.com/intomylife/SpringBoot [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDAyMjAw_size_16_color_FFFFFF_t_70]: /images/20220218/b9f2e22f3e654ca29de34c5348869f8c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDAyMjAw_size_16_color_FFFFFF_t_70 1]: /images/20220218/c8a42fae23a44681bc275cd2b7c731f8.png [20190417122418512.png]: /images/20220218/fdb117bf3b8647789797bd88252f3cec.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDAyMjAw_size_16_color_FFFFFF_t_70 2]: /images/20220218/07164c67fc3b44e5b47c751e5a632bb7.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDAyMjAw_size_16_color_FFFFFF_t_70 3]: /images/20220218/a8b361208d614b74996dbdbef43ab241.png
还没有评论,来说两句吧...