SpringBoot配置定时任务

发布时间 2023-03-27 21:38:58作者: 哒啦蹦哒啦

前言

在实际项目开发中,往往需要在项目启动前预处理,进行服务器预热。

  • 缓存预热

在查询并发性高的情况下,用户往往不能直接查询数据库内的数据,因为会大大增加的数据库的压力,这时就需要缓存预热。在项目启动前,需要将指定数据存入到Redis或其他缓存中,此时用户查询的操作就需要到Redis缓存中,从而大大减小了数据库的压力。

  • 连接池预热

多用户多次操作数据库时,需要建立多条数据库连接对象,无形中也极大地增加了服务器和数据库的连接压力。因此,需要在应用初始化时就建立若干条连接放入连接池,这样可以减少创建连接对象的次数。可以看出,连接池预热和缓存预热一样,连接池预热也是为了减轻数据库的压力。

 

一、服务器预热

 

SpringBoot提供了CommandLineRunner接口,实现该接口并重写run()方法,将需要执行的代码写入此方法,该预处理代码就会在SpringBoot项目启动时执行。

案例

@Component
public class ApplicationRunner implements CommandLineRunner {

    @Override
    public void run(String... args) {
        System.out.println("程序初始化时会执行该部分代码");
    }
}

需要注意的是,需要在任务类上加上@Component或其他Bean注解,这样任务类才会被IOC容器管理到。

运行结果

 二、定时任务

SpringBoot提供了一个注解@Scheduled,此注解加到要执行的任务方法上,项目启动后,服务器就会执行对应任务代码。

注意:需要在配置类中加上注解@EnableScheduling,开启任务配置,任务代码才会执行

案例

@Configuration
@EnableScheduling /* 开启定时任务,@EnableScheduling放在配置类文件 */
public class ApplicationCongiguration {
}
@Component
public class ScheduledJob {

    @Scheduled(cron = "0/5 * * * * ?")
    public void jobTest() {
        System.out.println("每分钟的第0秒开始,每隔5秒执行一次");
    }
}

cron表达式具体参考其他博文。

运行结果