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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章