javascript
Spring Boot CommandLineRunner和ApplicationRunner
在本快速教程中,我們將探索Spring Boot中兩個非常流行的界面: CommandLineRunner和ApplicationRunner 。
這些接口的一種常見用例是在應用程序啟動時加載一些靜態數據。 雖然,我看到這種用法主要用于測試數據設置。
它們都是帶有run()方法的功能接口。 此Run()方法在ApplicationContext加載之后和SpringApplication#run方法執行結束之前立即執行。
我們可以在CommandLineRunner的run()方法中以原始String的形式訪問應用程序參數。
讓我們借助示例來看看。
首先,讓我們編寫一個實現CommandLineRunner接口的bean:
@Component public class SampleCmdRunner implements CommandLineRunner { ?private static final Logger LOG = LoggerFactory.getLogger(SampleCmdRunner. class ); ???@Override public void run(String[] args) { LOG.info( "Executing the command line runner, Application arguments: " + Arrays.toString(args)); } }現在,讓我們引導我們的Spring Boot應用程序可執行jar :
java -jar SampleApp- 1.0 .jar parameter1 parameter2 parameter3以及三個命令行參數: parameter1,parameter2和parameter3 。
我們的控制臺日志將是:
sbcetTomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) Executing the command line runner, Application arguments: [parameter1, parameter2, parameter3] 2019 - 09 - 02 11 : 02 : 10.111 INFO 7676 --- [main] com.programmergirl.SampleApp : Started SampleApp in 2.11 seconds列出所有提供的參數的位置。
類似地,我們可以定義實現ApplicationRunner接口的bean:
@Component public class SampleAppRunner implements ApplicationRunner { ????private static final Logger LOG = LoggerFactory.getLogger(SampleAppRunner. class ); ????@Override public void run(ApplicationArguments args) { LOG.info( "Executing SampleAppRunner" ); } ? }ApplicationRunner提供對ApplicationArguments的訪問,而不僅僅是原始String參數。 從技術上來講,這是它們之間的唯一區別。
有多少
我們可以根據需要自由定義任意數量的CommandLineRunner和ApplicationRunner實現。
Java 8定義:
使用Java 8 lambda, 我們可以有一個代碼:
@SpringBootApplication public class SampleApp { ?public static void main(String[] args) { SpringApplication.run(SampleApp. class , args); } ?@Bean CommandLineRunner commandLineRunner() { return args -> System.out.println( "CommandLineRunner with args:" + Arrays.toString(args)); } ?@Bean ApplicationRunner applicationRunner() { return args -> System.out.println( "ApplicationRunner with args:" + Arrays.toString(args.getSourceArgs())) } }它在我們的Application類本身中定義了這些接口的實現。
訂購:
我們還可以使用@Order注釋對這些bean的執行施加順序。
說,我們有兩個CommandLineRunner實現:
@Component @Order ( 1 ) public class CmdRunner1 implements CommandLineRunner { private static final Logger LOG = LoggerFactory.getLogger(CmdRunner1. class ); ????@Override public void run(String[] args) { LOG.info( "In CmdRunner1" ); } } ? @Component @Order ( 3 ) public class CmdRunner2 implements CommandLineRunner { ?private static final Logger LOG = LoggerFactory.getLogger(CmdRunner2. class ); ????@Override public void run(String[] args) { LOG.info( "In CmdRunner2" ); } }連同實現ApplicationRunner的類:
@Component @Order ( 2 ) public class AppRunner implements ApplicationRunner { private static final Logger LOG = LoggerFactory.getLogger(AppRunner. class ); ?@Override public void run(ApplicationArguments args) { LOG.info( "In AppRunner" ); } }顯然,我們的CmdRunner1將首先執行,然后是AppRunner ,最后是CmdRunner2。
結論:
在本教程中,我們討論了Spring Boot提供的CommandLineRunner和ApplicationRunner接口。
翻譯自: https://www.javacodegeeks.com/2019/09/spring-boot-commandlinerunner-and-applicationrunner.html
總結
以上是生活随笔為你收集整理的Spring Boot CommandLineRunner和ApplicationRunner的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更好的默认NullPointerExce
- 下一篇: 查看linux配置信息命令(查看 lin