【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:停止更新了一段时间,七月底结了个婚,以及其他好多好多的事要处理,赶上大西安两波疫情,天气热,状态也不好,压力蛮大,焦虑等等,总之,大龄程序员终于结婚了,欠了一些债,以后得好好上班还债和养家糊口了,到年底的目标就是把外债还完。

posted @ 2022-08-25 11:06  泠雨0702  阅读(98)  评论(0编辑  收藏  举报