摘要:在使用構建應用啟動時,我們在工作中都是通過命令行來啟動應用,有時候會需要一些特定的參數以在應用啟動時,做一些初始化的操作。
在使用spring boot 構建應用啟動時,我們在工作中都是通過命令行來啟動應用,有時候會需要一些特定的參數以在應用啟動時,做一些初始化的操作。
spring boot 提供了 CommandLineRunner 和 ApplicationRunner 這兩個接口供用戶使用。
1. CommandLineRunner 1.1 聲明:@FunctionalInterface public interface CommandLineRunner { /** * Callback used to run the bean. * @param args incoming main method arguments * @throws Exception on error */ void run(String... args) throws Exception; }1.2 使用:
package com.example.consoleapplication; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @Component public class TestRunner implements CommandLineRunner { @Override public void run(String... args) { // Do something... for(String arg: args){ System.out.println(arg); } System.out.print("test command runner"); } }1.3 運行結果
運行: java -jar build/libs/consoleapplication-0.0.1-SNAPSHOT.jar -sdfsaf sdfas,
結果如下:
2019-03-16 17:31:56.544 INFO 18679 --- [ main] c.e.consoleapplication.DemoApplication : No active profile set, falling back to default profiles: default 2019-03-16 17:31:57.195 INFO 18679 --- [ main] c.e.consoleapplication.DemoApplication : Started DemoApplication in 16.172 seconds (JVM running for 16.65) -sdfsaf sdfas test command runner%2. ApplicationRunner 2.1 聲明
/** * Interface used to indicate that a bean should run when it is contained within * a {@link SpringApplication}. Multiple {@link ApplicationRunner} beans can be defined * within the same application context and can be ordered using the {@link Ordered} * interface or {@link Order @Order} annotation. * * @author Phillip Webb * @since 1.3.0 * @see CommandLineRunner */ @FunctionalInterface public interface ApplicationRunner { /** * Callback used to run the bean. * @param args incoming application arguments * @throws Exception on error */ void run(ApplicationArguments args) throws Exception; }2.2 使用
ApplicationRunner 和 CommandLineRunner 的使用是有差別的:
CommandLineRunner 的使用,只是把參數根據空格分割。
ApplicationRunner 會根據 是否匹配 --key=value 來解析參數,
能匹配,則為 optional 參數, 可用getOptionValues獲取參數值。
不匹配則是 non optional 參數。
package com.example.consoleapplication; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; import org.springframework.boot.ApplicationArguments; @Component public class TestApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { // Do something... System.out.println("option arg names" + args.getOptionNames()); System.out.println("non option+" + args.getNonOptionArgs()); } }2.3 運行結果
運行命令 java -jar build/libs/consoleapplication-0.0.1-SNAPSHOT.jar -non1 non2 --option=1, 結果為:
2019-03-16 18:08:08.528 INFO 19778 --- [ main] c.e.consoleapplication.DemoApplication : No active profile set, falling back to default profiles: default 2019-03-16 18:08:09.166 INFO 19778 --- [ main] c.e.consoleapplication.DemoApplication : Started DemoApplication in 16.059 seconds (JVM running for 16.56) test option arg names[option] non option+[-non1, non2]-non1 non2 --option=1 test%
可以看到, optional 參數名有 option, non optional 參數有 -non1 和 non2
3. 小結CommandLineRunner 和 ApplicationRunner 都能實現命令行應用啟動時根據參數獲取我們需要的值,做特殊的邏輯。但兩者有所不同,推薦使用 ApplicationRunner 的 optional 參數, 方便擴展。
4. 參考文檔https://docs.spring.io/spring...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73738.html
摘要:應用化極簡教程陳光劍基于的企業級應用開發最佳實踐前面的章節中,我們都是在環境中開發運行測試應用程序。關鍵字是分布式應用微服務容器虛擬化。通常,在企業項目實踐中,會實現一套應用部署發布的自動化運維平臺工具。 Spring Boot 應用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)—— 基于 Gradle + Kotlin的企業級應用開發最佳實踐 前面的章節中,...
摘要:應用化極簡教程陳光劍基于的企業級應用開發最佳實踐前面的章節中,我們都是在環境中開發運行測試應用程序。關鍵字是分布式應用微服務容器虛擬化。通常,在企業項目實踐中,會實現一套應用部署發布的自動化運維平臺工具。 Spring Boot 應用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)—— 基于 Gradle + Kotlin的企業級應用開發最佳實踐 前面的章節中,...
摘要:命令行參數傳遞之前我們說過使用的一大優勢就是可以將工程直接打包成一個包而不需要單獨部署。執行獲取到參數執行結果我們可以發現,通過方法的參數可以很方便地獲取到命令行參數的值。如果需要獲取命令行參數時則建議使用。 本篇文章我們將探討CommandLineRunner和ApplicationRunner的使用。 在閱讀本篇文章之前,你可以新建一個工程,寫一些關于本篇內容代碼,這樣會加深你對本...
摘要:學習筆記使用很容易創建一個獨立運行運行內嵌容器準生產級別的基于框架的項目,使用你可以不用或者只需要很少的配置。異常消息如果這個錯誤是由異常引起的。錯誤發生時請求的路徑。 Spring-Boot 1.5 學習筆記 使用Spring Boot很容易創建一個獨立運行(運行jar,內嵌Servlet容器)、準生產級別的基于Spring框架的項目,使用Spring Boot你可以不用或者只需要很...
摘要:安裝可以與經典開發工具一起使用,也可以作為命令行工具安裝。下面的示例展示了一個典型的文件安裝命令行接口是一個命令行工具,你可以使用它來快速地實現的原型。 10. 安裝Spring Boot Spring Boot可以與經典Java開發工具一起使用,也可以作為命令行工具安裝。無論哪種方式,都需要Java SDK v1.8或更高版本。在開始之前,你應該使用以下命令檢查當前的Java安裝: ...
閱讀 3267·2023-04-25 14:35
閱讀 3417·2021-11-15 18:00
閱讀 2537·2021-11-12 10:34
閱讀 2481·2021-11-11 16:54
閱讀 3464·2021-10-08 10:12
閱讀 2762·2021-09-06 15:02
閱讀 3318·2021-09-04 16:48
閱讀 2799·2019-08-29 14:02