如何使用 CommandLineRunner?
要使用CommandLineRunner,我們建立一個實現CommandLineRunner介面的類,並過載它的run()方法,使用Spring如@Component之類註釋此類,當Spring Boot應用啟動時,就在完成啟動之前,CommandLineRunner將會被執行。我們可以將命令列引數傳遞給 CommandLineRunner,它用於在主入口應用程式啟動之前啟動任何排程程式或記錄任何訊息。
首先,讓我們看看如何在Maven執行我們的應用時傳遞引數,對於Spring Boot 2.x,我們可以使用-Dspring-boot.run.arguments傳遞引數:
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.main.banner-mode=off,--customArgument=custom
如何在使用Gradle Plugin執行應用程式時傳遞引數? 要在build.gradle檔案中配置我們的bootRun任務:
現在,我們可以傳遞命令列引數,如下所示:
./gradlew bootRun -Pargs=--spring.main.banner-mode=off,--customArgument=custom
除了傳遞自定義引數,我們還可以覆蓋系統屬性。例如,這是我們的application.properties檔案:
要覆蓋server.port值,我們需要以下面的方式傳遞新值:
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085
注意:
1. Spring Boot將命令列引數轉換為屬性,並將它們新增為環境變數;
2. 我們可以在application.properties中使用佔位符,使用簡短的命令列引數-port=8085,而不是多個server的-server.port=8085:
2. 命令列引數優先於application.properties值
我們可以阻止我們的應用程式將命令列引數轉換為屬性:
如何從應用程式的main()方法訪問命令列引數?
首先,讓我們看看如何在Maven執行我們的應用時傳遞引數,對於Spring Boot 2.x,我們可以使用-Dspring-boot.run.arguments傳遞引數:
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.main.banner-mode=off,--customArgument=custom
如何在使用Gradle Plugin執行應用程式時傳遞引數? 要在build.gradle檔案中配置我們的bootRun任務:
bootRun { if (project.hasProperty('args')) { args project.args.split(',') } } <p class="indent"> |
現在,我們可以傳遞命令列引數,如下所示:
./gradlew bootRun -Pargs=--spring.main.banner-mode=off,--customArgument=custom
除了傳遞自定義引數,我們還可以覆蓋系統屬性。例如,這是我們的application.properties檔案:
server.port=8081 spring.application.name=SampleApp <p class="indent"> |
要覆蓋server.port值,我們需要以下面的方式傳遞新值:
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085
注意:
1. Spring Boot將命令列引數轉換為屬性,並將它們新增為環境變數;
2. 我們可以在application.properties中使用佔位符,使用簡短的命令列引數-port=8085,而不是多個server的-server.port=8085:
server.port=${port:8080} <p class="indent"> |
2. 命令列引數優先於application.properties值
我們可以阻止我們的應用程式將命令列引數轉換為屬性:
@SpringBootApplication public class Application extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication application = new SpringApplication(Application.class); application.setAddCommandLineProperties(false); application.run(args); } } <p class="indent"> |
如何從應用程式的main()方法訪問命令列引數?
@SpringBootApplication public class Application extends SpringBootServletInitializer { public static void main(String[] args) { for(String arg:args) { System.out.println(arg); } SpringApplication.run(Application.class, args); } } <p class="indent"> |
[該貼被banq於2018-08-22 20:15修改過]
相關文章
- Spring Boot 2 - 使用CommandLineRunner與ApplicationRunnerSpring BootAPP
- SpringBoot2.x入門:使用CommandLineRunner鉤子介面Spring Boot
- Spring Boot 中的 ApplicationRunner 和 CommandLineRunnerSpring BootAPP
- CommandLineRunner 可能會導致你的應用當機停止,我勸你耗子尾汁
- springboot 專案一啟動,就開始執行某個功能:實現 CommandLineRunner 介面,重寫 run 方法。Spring Boot
- 如何使用反射反射
- UserAgent如何使用
- MQTT如何使用MQQT
- DBUtils如何使用
- 如何使用GitHub?Github
- 如何使用 DockerHubDocker
- 【如何使用jedis】
- 如何使用使用 HAVING 與 ORDER BY?
- 如何使用提示詞
- 如何使用contrib/vimrc
- 如何使用RCurl庫
- 如何使用grequests庫
- 如何使用Guzzle庫
- 如何使用htmltab庫HTML
- 如何使用 RestSharp 庫REST
- WebBits庫如何使用Web
- 事件代理如何使用?事件
- 如何使用 id 命令?
- nestjs如何使用typeormJSORM
- mac如何使用pythonMacPython
- python 類如何使用Python
- MySql escape如何使用MySql
- 如何使用 Service 模式模式
- 如何使用 Repository 模式模式
- 如何高效使用Vim
- 如何使用go文件Go
- wordpress如何使用tmpfs
- PostMan該如何使用Postman
- Mac 如何使用composerMac
- html中如何使用svg?HTMLSVG
- 如何使用 Services.AddDistributedMemoryCache
- 如何優雅使用 vuexVue
- 如何使用Mechanize::PhantomJS庫JS