この記事では、CommandLineRunner と ApplicationRunner について説明します。これには一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。
CommandLineRunner と ApplicationRunner は Spring Boot によって提供されるインターフェイスであり、どちらも run() メソッドを持っています。これらを実装するすべての Bean は、Spring Boot サービスの開始後に自動的に呼び出されます。
この機能により、初期化作業を行ったり、テスト コードを作成したりするのに理想的な場所です。
CommandLineRunner
Application を使用して実装する
新しいプロジェクトを作成した後、簡単にするために、Application クラスを直接使用して CommandLineRunner インターフェイスを実装します。このクラスのアノテーション @SpringBootApplication によって自動的に設定されます。
package cn.examplecode.sb2runner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Sb2runnerApplication implements CommandLineRunner { private static Logger logger = LoggerFactory.getLogger(Sb2runnerApplication.class); public static void main(String[] args) { SpringApplication.run(Sb2runnerApplication.class, args); } @Override public void run(String... args) throws Exception { logger.info("服务已启动,执行command line runner。"); for (int i = 0; i <p>次に、サービスを直接開始し、次のようにログを確認して、run() メソッドが正常に実行されていることを確認します。 </p><pre class="brush:php;toolbar:false">Tomcat started on port(s): 8080 (http) with context path '' Started Sb2runnerApplication in 2.204 seconds (JVM running for 3.161) 服务已启动,执行command line runner。
The run( ) メソッドには変数パラメータ引数があり、このパラメータはコマンド ライン パラメータを受け取るために使用されます。テストするパラメータを追加しましょう:
次に、サービスを再起動してログを観察します。パラメーターが正常に受信されたことがわかります。
Tomcat started on port(s): 8080 (http) with context path '' Started Sb2runnerApplication in 1.888 seconds (JVM running for 2.41) 服务已启动,执行command line runner。 args[0]: --param=sth
コマンド ライン パラメーターの転送
Spring Boot を使用する主な利点は、プロジェクトを次のようにできることであると前に述べました。 jar パッケージに直接パッケージ化され、個別にデプロイする必要はありません。 jar パッケージにパッケージ化した後、jar パッケージを直接実行してサービスを開始できます。このようにして、jar パッケージの実行時にコマンド ライン パラメーターを渡し、CommandLineRunner にパラメーターを受信させることができます。
このシナリオはサーバーで特に一般的です。たとえば、操作を外部に公開せずに実行したい場合は、操作のエントリ ポイントとして CommandLineRunner を使用できます。
デモ用に jar パッケージを作成してみましょう。
#ログを見るとパラメータも正常に取得できていることがわかります。パラメーターを渡すことにより、ビジネス ロジックのさまざまなパラメーターに基づいてさまざまな操作を実行できます。
上で述べたのは 1 つの CommandLineRunner だけですが、複数の CommandLineRunner がある場合はどうなるでしょうか?実行順序を制御するにはどうすればよいでしょうか?
次に実行順序を指定する方法を紹介します。
Spring Boot には、実行順序の指定に使用できるアノテーション「@Order」が用意されています。たとえば、プロジェクトには 3 つの CommandLineRunner があります。 :
@Component @Order(1) public class CommandRunner1 implements CommandLineRunner { private static Logger logger = LoggerFactory.getLogger(CommandRunner1.class); @Override public void run(String... args) throws Exception { logger.info("执行第一个command line runner..."); } } @Component @Order(2) public class CommandRunner2 implements CommandLineRunner { private static Logger logger = LoggerFactory.getLogger(CommandRunner2.class); @Override public void run(String... args) throws Exception { logger.info("执行第二个command line runner..."); } } @Component @Order(3) public class CommandRunner3 implements CommandLineRunner { private static Logger logger = LoggerFactory.getLogger(CommandRunner3.class); @Override public void run(String... args) throws Exception { logger.info("执行第三个command line runner..."); } }
このクラスに @Order アノテーションを直接追加すると、Spring Boot はアノテーションで指定された順序で小さいものから大きいものまで実行します。とてもシンプルですね。
Tomcat started on port(s): 8080 (http) with context path '' Started Sb2runnerApplication in 1.764 seconds (JVM running for 2.292) 执行第一个command line runner... 执行第二个command line runner... 执行第三个command line runner...
ApplicationRunner と CommandLineRunner は同じことを行います。その run() メソッドは、サービスの開始後に自動的に呼び出されます。唯一の違いは、ApplicationRunner がコマンド ライン パラメーターをカプセル化することです。を使用すると、コマンド ライン パラメーターとパラメーター値を簡単に取得できます。
@Component public class ApplicationRunner1 implements ApplicationRunner { private static Logger logger = LoggerFactory.getLogger(ApplicationRunner1.class); @Override public void run(ApplicationArguments args) throws Exception { logger.info("执行application runner..."); logger.info("获取到参数: " + args.getOptionValues("param")); } }
実行結果:
#コマンド ライン パラメータは、run() のパラメータ ApplicationArguments を通じて簡単に取得できることがわかります。メソッド.値.
したがって、プロジェクトでコマンド ライン パラメーターを取得する必要がある場合は、ApplicationRunner を使用することをお勧めします。
概要
CommandLineRunner であっても ApplicationRunner であっても、その目的はサービスの開始後にいくつかの操作を実行することです。コマンドラインパラメータを取得する必要がある場合は、ApplicationRunner を使用することをお勧めします。
別のシナリオは、データベース ユーザー データの変更など、サーバー上で操作を実行する必要があるが、適切な実行エントリが見つからない場合です。この場合、これが理想的な使用シナリオです。
以上がCommandLineRunner と ApplicationRunner の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。