场景:证券、基金部分公司在自己业务活动项目启动之前都会将数据提前加载到redis中
CommandLineRunner 接口的 Component 会在所有 Spring Beans 都初始化之后,SpringApplication.run() 之前执行,非常适合在应用程序启动之初进行一些数据初始化的工作
1、初始化类
@Component
public class MjtRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("在这个方法里可以初始化数据,加载数据到缓存redis");
}
}
如果我们需要将mysql等数据提前加载到redis中,可以实现这个类重写run方法
2、测试结果
在启动类上添加验证启动顺序
@SpringBootApplication
public class Spring5Application {
public static void main(String[] args) {
System.out.println("111");
SpringApplication.run(Spring5Application.class, args);
System.out.println("2222");
}
}
只添加两行输出结果,启动之后,如图
3、编写多个初始化
在类上添加@Order注解
@Component
@Order(1)
public class MjtRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("在这个方法里可以初始化数据,加载数据到缓存redis");
}
}
@Component
@Order(2)
public class TestRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("在这个方法里可以初始化数据,加载数据到缓存redis");
}
}
这样初始化的顺序就是从小到大的顺序执行。
4、第二种使用注解方法
@PostConstruct 和 @PreDestroy
@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法执行执行之后执行
在方法上添加这两个注解也可以实现项目启动之前执行特定的方法
转载于:https://my.oschina.net/mdxlcj/blog/1862479