摘要:在使用構(gòu)建應(yīng)用啟動(dòng)時(shí),我們?cè)诠ぷ髦卸际峭ㄟ^(guò)命令行來(lái)啟動(dòng)應(yīng)用,有時(shí)候會(huì)需要一些特定的參數(shù)以在應(yīng)用啟動(dòng)時(shí),做一些初始化的操作。
在使用spring boot 構(gòu)建應(yīng)用啟動(dòng)時(shí),我們?cè)诠ぷ髦卸际峭ㄟ^(guò)命令行來(lái)啟動(dòng)應(yīng)用,有時(shí)候會(huì)需要一些特定的參數(shù)以在應(yīng)用啟動(dòng)時(shí),做一些初始化的操作。
spring boot 提供了 CommandLineRunner 和 ApplicationRunner 這兩個(gè)接口供用戶使用。
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 運(yùn)行結(jié)果
運(yùn)行: java -jar build/libs/consoleapplication-0.0.1-SNAPSHOT.jar -sdfsaf sdfas,
結(jié)果如下:
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 的使用,只是把參數(shù)根據(jù)空格分割。
ApplicationRunner 會(huì)根據(jù) 是否匹配 --key=value 來(lái)解析參數(shù),
能匹配,則為 optional 參數(shù), 可用getOptionValues獲取參數(shù)值。
不匹配則是 non optional 參數(shù)。
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 運(yùn)行結(jié)果
運(yùn)行命令 java -jar build/libs/consoleapplication-0.0.1-SNAPSHOT.jar -non1 non2 --option=1, 結(jié)果為:
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 參數(shù)名有 option, non optional 參數(shù)有 -non1 和 non2
3. 小結(jié)CommandLineRunner 和 ApplicationRunner 都能實(shí)現(xiàn)命令行應(yīng)用啟動(dòng)時(shí)根據(jù)參數(shù)獲取我們需要的值,做特殊的邏輯。但兩者有所不同,推薦使用 ApplicationRunner 的 optional 參數(shù), 方便擴(kuò)展。
4. 參考文檔https://docs.spring.io/spring...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/73738.html
摘要:應(yīng)用化極簡(jiǎn)教程陳光劍基于的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)最佳實(shí)踐前面的章節(jié)中,我們都是在環(huán)境中開(kāi)發(fā)運(yùn)行測(cè)試應(yīng)用程序。關(guān)鍵字是分布式應(yīng)用微服務(wù)容器虛擬化。通常,在企業(yè)項(xiàng)目實(shí)踐中,會(huì)實(shí)現(xiàn)一套應(yīng)用部署發(fā)布的自動(dòng)化運(yùn)維平臺(tái)工具。 Spring Boot 應(yīng)用 Docker 化 《Spring Boot 2.0極簡(jiǎn)教程》(陳光劍)—— 基于 Gradle + Kotlin的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)最佳實(shí)踐 前面的章節(jié)中,...
摘要:應(yīng)用化極簡(jiǎn)教程陳光劍基于的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)最佳實(shí)踐前面的章節(jié)中,我們都是在環(huán)境中開(kāi)發(fā)運(yùn)行測(cè)試應(yīng)用程序。關(guān)鍵字是分布式應(yīng)用微服務(wù)容器虛擬化。通常,在企業(yè)項(xiàng)目實(shí)踐中,會(huì)實(shí)現(xiàn)一套應(yīng)用部署發(fā)布的自動(dòng)化運(yùn)維平臺(tái)工具。 Spring Boot 應(yīng)用 Docker 化 《Spring Boot 2.0極簡(jiǎn)教程》(陳光劍)—— 基于 Gradle + Kotlin的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)最佳實(shí)踐 前面的章節(jié)中,...
摘要:命令行參數(shù)傳遞之前我們說(shuō)過(guò)使用的一大優(yōu)勢(shì)就是可以將工程直接打包成一個(gè)包而不需要單獨(dú)部署。執(zhí)行獲取到參數(shù)執(zhí)行結(jié)果我們可以發(fā)現(xiàn),通過(guò)方法的參數(shù)可以很方便地獲取到命令行參數(shù)的值。如果需要獲取命令行參數(shù)時(shí)則建議使用。 本篇文章我們將探討CommandLineRunner和ApplicationRunner的使用。 在閱讀本篇文章之前,你可以新建一個(gè)工程,寫(xiě)一些關(guān)于本篇內(nèi)容代碼,這樣會(huì)加深你對(duì)本...
摘要:學(xué)習(xí)筆記使用很容易創(chuàng)建一個(gè)獨(dú)立運(yùn)行運(yùn)行內(nèi)嵌容器準(zhǔn)生產(chǎn)級(jí)別的基于框架的項(xiàng)目,使用你可以不用或者只需要很少的配置。異常消息如果這個(gè)錯(cuò)誤是由異常引起的。錯(cuò)誤發(fā)生時(shí)請(qǐng)求的路徑。 Spring-Boot 1.5 學(xué)習(xí)筆記 使用Spring Boot很容易創(chuàng)建一個(gè)獨(dú)立運(yùn)行(運(yùn)行jar,內(nèi)嵌Servlet容器)、準(zhǔn)生產(chǎn)級(jí)別的基于Spring框架的項(xiàng)目,使用Spring Boot你可以不用或者只需要很...
摘要:安裝可以與經(jīng)典開(kāi)發(fā)工具一起使用,也可以作為命令行工具安裝。下面的示例展示了一個(gè)典型的文件安裝命令行接口是一個(gè)命令行工具,你可以使用它來(lái)快速地實(shí)現(xiàn)的原型。 10. 安裝Spring Boot Spring Boot可以與經(jīng)典Java開(kāi)發(fā)工具一起使用,也可以作為命令行工具安裝。無(wú)論哪種方式,都需要Java SDK v1.8或更高版本。在開(kāi)始之前,你應(yīng)該使用以下命令檢查當(dāng)前的Java安裝: ...
閱讀 3301·2023-04-25 14:35
閱讀 3423·2021-11-15 18:00
閱讀 2572·2021-11-12 10:34
閱讀 2502·2021-11-11 16:54
閱讀 3485·2021-10-08 10:12
閱讀 2770·2021-09-06 15:02
閱讀 3327·2021-09-04 16:48
閱讀 2806·2019-08-29 14:02