Spring Boot:熱部署與系統啓動任務
熱部署
在代碼修改完成以後,需要重新啓動項目,花費大量時間
熱部署就是爲了解決這個問題
加入熱部署
idea中使用熱部署需要引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
在idea中,每當你編譯的時候,就會自動重啓
編譯按鈕爲Build中的Build Project
系統啓動任務
不使用框架的解決方案
在項目啓動階段需要一些數據初始化操作,這些操作有一個共同的特點,只有在項目啓動時進行,以後都不執行。
這種情況,一般定義一個ContextServlet的Listener來監聽項目啓動和銷燬,來實現相應的數據初始化和銷燬操作
如下
public class OriginListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
//在這裏做初始化操作
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
//在這裏做數據備份操作
}
}
SpringBoot的解決方案
SpringBoot中針對系統啓動任務提供了兩種解決方案
1.CommandLineRunner
創建類
//註冊爲Spring容器中的一個Bean
@Component
//表示項目啓動的優先級,因爲在一個項目中,啓動項目可能有很多個。如果不設置,默認情況下,優先級最低
@Order(100)
public class OriginCommandLineRunner implements CommandLineRunner {
@Override
//當項目啓動時,run方法被執行
//run方法的參數,來自於項目的啓動參數,即項目入口類(Applicaion)中main方法的參數
public void run(String... args) throws Exception {
System.out.println(Arrays.toString(args)+"123");
}
}
此時,當啓動項目 時候,run方法會被執行,至於參數args可以通過兩種方式傳遞
1,通過Program arguments傳入參數
中的Program arguments
2.命令行啓動項目
將項目打包,在命令行中啓動項目,然後在啓動時在命令行中傳入參數
運行jar包
舉例:
2.ApplicationRunner
使用ApplicationRunner
@Component
@Order(98)
public class OriginApplicationRunner implements ApplicationRunner {
@Override
//相比於CommadnLineRunner參數不同
public void run(ApplicationArguments args) throws Exception {
List<String> a= args.getNonOptionArgs();//獲取命令行中無key的參數,相當於CommandLineRunner
System.out.println(a);
Set<String> b=args.getOptionNames();//獲取所有的key/value形式的參數
for (String key:b){
System.out.println(key+":"+args.getOptionValues(key));//獲取key/value形式的參數
}
//獲取命令行的所有參數
String[] c=args.getSourceArgs();
System.out.println(Arrays.toString(c));
}
}
中的Program arguments
key/value使用–傳輸
–touxian=hahahah