场景:证券、基金部分公司在自己业务活动项目启动之前都会将数据提前加载到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");
    }
}

只添加两行输出结果,启动之后,如图

崛起于Springboot2.X之项目启动前初始化工作(30)

崛起于Springboot2.X之项目启动前初始化工作(30)

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()方法执行执行之后执行

崛起于Springboot2.X之项目启动前初始化工作(30)

在方法上添加这两个注解也可以实现项目启动之前执行特定的方法

转载于:https://my.oschina.net/mdxlcj/blog/1862479

相关文章: