学科分类
目录
Spring Boot开发

定时任务实现

下面,使用Spring Boot框架整合一个简单的定时任务案例演示对定时任务的使用。

(1)编写定时任务业务处理方法

在项目的com.itheima.service的包下新建一个定时任务管理的业务处理类ScheduledTaskService,并在该类中编写对应的定时任务处理方法,内容如文件1所示。

文件1 ScheduledTaskService.java

 1    import org.springframework.scheduling.annotation.Scheduled;
 2    import org.springframework.stereotype.Service;
 3    import java.text.SimpleDateFormat;
 4    import java.util.Date;
 5    @Service
 6    public class ScheduledTaskService {
 7        private static final SimpleDateFormat dateFormat =
 8                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 9        private Integer count1 = 1;
 10        private Integer count2 = 1;
 11        private Integer count3 = 1;
 12        @Scheduled(fixedRate = 60000)
 13        public void scheduledTaskImmediately() {
 14            System.out.println(String.format("fixedRate第%s次执行,当前时间为:%s", 
 15                                   count1++, dateFormat.format(new Date())));
 16        }
 17        @Scheduled(fixedDelay = 60000)
 18        public void scheduledTaskAfterSleep() throws InterruptedException {
 19            System.out.println(String.format("fixedDelay第%s次执行,当前时间为:%s",
 20                                   count2++, dateFormat.format(new Date())));
 21            Thread.sleep(10000);
 22        }
 23        @Scheduled(cron = "0 * * * * *")
 24        public void scheduledTaskCron(){
 25            System.out.println(String.format("cron第%s次执行,当前时间为:%s",
 26                                   count3++, dateFormat.format(new Date())));
 27        }
 28    }

文件1中,使用@Scheduled注解声明了三个定时任务方法,这三个方法定制的执行规则基本相同,都是每隔1分钟重复执行一次定时任务,在使用fixedDelay属性的方法scheduledTaskAfterSleep()中,使用Thread.sleep(10000)模拟该定时任务处理耗时为10秒钟。需要说明的是,在Spring Boot中使用基于注解方式的定时任务注解,必须先引入Spring框架依赖,而这在之前创建项目时已经引入了Web模块的Web依赖,所以这里可以直接使用。

(2)开启基于注解的定时任务支持

为了使Spring Boot中基于注解方式的定时任务生效,还需要在项目启动类上使用@EnableScheduling注解开启基于注解的定时任务支持,内容如文件2所示。

文件2 Chapter09Application.java

 1    import org.springframework.boot.SpringApplication;
 2    import org.springframework.boot.autoconfigure.SpringBootApplication;
 3    import org.springframework.scheduling.annotation.EnableAsync;
 4    import org.springframework.scheduling.annotation.EnableScheduling;
 5    @EnableScheduling    // 开启基于注解的定时任务支持
 6    @EnableAsync          // 开启基于注解的异步任务支持
 7    @SpringBootApplication
 8    public class Chapter09Application {
 9        public static void main(String[] args) {
 10            SpringApplication.run(Chapter09Application.class, args);
 11        }
 12    }

(3)定时任务效果测试

启动chapter09项目,项目启动过程中仔细查看控制台输出效果,如图1所示。

图1 定时任务调用效果

从演示结果可以看出,项目启动成功后,配置@Scheduled注解的fixedRate和fixedDelay属性的定时方法会立即执行一次,配置cron属性的定时方法会在整数分钟时间点首次执行;接着,配置fixedRate和cron属性的方法会每隔1分钟重复执行一次定时任务,而配置fixedDelay属性的方法是在上一次方法执行完成后再相隔1分钟重复执行一次定时任务

点击此处
隐藏目录