1. 程式人生 > 實用技巧 >崛起於Springboot2.X之專案啟動前初始化工作(30)

崛起於Springboot2.X之專案啟動前初始化工作(30)

>>> hot3.png

場景:證券、基金部分公司在自己業務活動專案啟動之前都會將資料提前載入到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");
    }
}

只新增兩行輸出結果,啟動之後,如圖

bc21c1c197a8575368eb210e28e3cde50be.jpg

b98aadda8cb0c1db38e034367bdb34d9a0b.jpg

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