<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 一、簡介 Spring Boot提供了兩個接口:CommandLineRunner、ApplicationRunner,用于啟動應用時做特殊處理,這些代碼會在SpringApplication的run()方法運行完成之前被執行。 通常用于應用啟動前的特殊代碼執行、特殊數據加載、垃圾數據清理、微服務的服務發現注冊、系統啟動成功后的通知等。相當于Spring的ApplicationListener、Servlet的ServletContextListener。**使用二者的好處在于,可以方便的使用應用啟動參數**,根據參數不同做不同的初始化操作。 ## 二、代碼小實驗 ### 通過@Component定義方式實現 CommandLineRunner:參數是字符串數組 ~~~ @Slf4j @Component public class CommandLineStartupRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { log.info("CommandLineRunner傳入參數:{}", Arrays.toString(args)); } } ~~~ ApplicationRunner:參數被放入ApplicationArguments,通過getOptionNames()、getOptionValues()、getSourceArgs()獲取參數 ~~~ @Slf4j @Component public class AppStartupRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { log.info("ApplicationRunner參數名稱: {}", args.getOptionNames()); log.info("ApplicationRunner參數: {}", args.getSourceArgs()); } } ~~~ ![](https://img.kancloud.cn/b1/f9/b1f900213dff57b2bf4dcb8ead8e4363_442x149.png) 在項目啟動時就能看到,這兩個方法已經啟動 ![](https://img.kancloud.cn/58/09/580968bd1cfc9d79cd9b3ad0114eed4f_1619x104.png) ### 通過@Bean定義方式實現 ~~~ @Configuration public class BeanRunner { @Bean @Order(1) public CommandLineRunner runner1(){ return new CommandLineRunner() { public void run(String... args){ System.out.println("CommandLineRunner run1()" + Arrays.toString(args)); } }; } @Bean @Order(2) public CommandLineRunner runner2(){ return new CommandLineRunner() { public void run(String... args){ System.out.println("CommandLineRunner run2()" + Arrays.toString(args)); } }; } @Bean @Order(3) public CommandLineRunner runner3(){ return new CommandLineRunner() { public void run(String... args){ System.out.println("CommandLineRunner run3()" + Arrays.toString(args)); } }; } } ~~~ 可以通過@Order設置執行順序 ![](https://img.kancloud.cn/a1/57/a157d5a45900fdae6c869161b4b58268_1777x246.png) ## 三、執行測試 ![](https://img.kancloud.cn/57/c1/57c1952d60191b056aab9b5e8c0ba0de_717x381.png) ![](https://img.kancloud.cn/23/3b/233b6a9dcf18658e8412ae977fe79588_1716x1022.png) 重啟服務,會看到參數傳入 ![](https://img.kancloud.cn/6a/18/6a180045d2e9485501753624a3e83856_1735x124.png) ## 四、總結 CommandLineRunner、ApplicationRunner的核心用法是一致的,就是用于應用啟動前的特殊代碼執行。ApplicationRunner的執行順序先于CommandLineRunner;CommandLineRunner只是將對象按照原樣顯示出來,ApplicationRunner將參數封裝成了對象,提供了獲取參數名、參數值等方法,操作上會方便一些。 另外可以通過@Order定義執行的書序。 這個方法可以在程序啟動時傳入初始化的參數或者操作,將參數或者方法寫在里面達到初始化程序的操作。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看