前言
在实际项目开发中,往往需要在项目启动前预处理,进行服务器预热。
-
缓存预热
在查询并发性高的情况下,用户往往不能直接查询数据库内的数据,因为会大大增加的数据库的压力,这时就需要缓存预热。在项目启动前,需要将指定数据存入到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表达式具体参考其他博文。
运行结果