序文
実際の作業では、私たちは常にそのような要件に遭遇します。プロジェクトが開始されると、スレッドプールの初期化、暗号化証明書のロードなどの初期化操作を実行する必要があります。本日、プロジェクトの起動の初期化リソース操作を解決するために特別に設計されたスプリングブートツールを紹介します。
このアーティファクトはCommandLinerunnerです。 CommandLinerunnerインターフェイスのコンポーネントは、SpringApplication.run()の前に実行されます。
次に、ケースを使用して使用方法をテストします。テストする前に、2行の印刷プロンプトをスタートアップクラスに追加して、CommandLinerunnerの実行タイミングを特定できるようにします。
@SpringBootApplicationPublic Class CommandLinerunnerApplication {public static void main(string [] args){system.out.println( "service to start。"); springApplication.run(commandlinerunnerapplication.class、args); System.out.println( "サービスが開始されました。"); }}次に、CommandLinerunnerを継承し、Run()メソッドを実装するクラスを直接作成します。
@componentPublicクラスランナーを実装するCommandLinerunner {@Override public void run(string ... args)throws exception {system.out.println( "ランナーが初期化を開始..."); }}実行方法を確認するために、Run()メソッドにいくつかのパラメーターを印刷します。完了後、テストのプロジェクトを開始します。
...The service to start.____ __ _ /// / ___'_ __ _(_)_ ____ _ / / / / ( ( )/___ | '_ | '_ | / / /` | / / / / / / / / / / / / / / | | | | | | | | | | | | | | || (_| | ) ) ) ) )' |____| .__ || | _ | | _ | | _ | | _/__、| / / / / / / ============================================================== / _ / _ / :: spring boot ::(v2.0.0.Release).. 2018-04-21 22:21:34.706 INFO 27016--- [主に] OSBWEMBEDED.TOMCAT.TOMCATWEBSERVER:TOMCATは、コンテキストパスでポートでポートで開始されました:2018-04-21 22:21:34.710 INFO 27016 --- [Main] com.neo.commandlinerunnerunnerunnerapplication:5.128秒でのCommandlinernnerunnerunnerunnerunnerapplication(初期化を開始...サービスが開始されました。
コンソールの印刷情報に基づいて、Spring Bootコンテナがロードされた後にCommandLinerunnerのメソッドが実行され、実行が完了した後にプロジェクトが開始されることがわかります。
コンテナを起動するときに多くのリソースを初期化する必要があり、最初のリソースが互いに順序付けられる必要がある場合、異なるCommandLinerunnersの実行順序を確保するにはどうすればよいですか? Spring Bootはソリューションも提供します。つまり、 @Order Annotationを使用します。
テストする2つのCommandLinerunner実装クラスを作成します。
最初の実装クラス:
@component @order(1)public class orderrunner1を実装するcommandlinerunner {@override public void run(string ... args)throws exception {system.out.println( "orderrunner1が初期化を開始..."); }}2番目の実装クラス:
@component @order(2)public class orderrunner2を実装するcommandlinerunner {@override public void run(string ... args)throws exception {system.out.println( "Orderrunner2が初期化を開始します..."); }}追加が完了したら、再起動して実行命令を観察します。
...開始するサービス。 ____ _ __ _ /// ____'_ __ _(_)_ __ __ __ / / / / /(() / ___ | '_ |' _ | | / / / / / / / / ___)| | | | | | | | | | | | | | || (_ | |))))) '| ____ | .__ || | _ | | _ | | _/__、| / / / / / ======================================================= / / _ // :: SPRING BOOT ::(V2.0.0.RELEASE)... 2018-04-21 22:21:34.706情報27016 OSBWEMBEDED.TOMCAT.TOMCATWEBSERVER:TOMCATは、コンテキストパスでポート(s):8080(http)で開始されました '' 2018-04-21 22:21:34.710 Info 27016 --- [Main] com.neo.commandlinerunnerunnerapplication:5.128秒のランニングでのコマンドランネナーアップリケーションの開始OrderRunner1初期化を開始... OrderRunner2が初期化を開始します...ランナーは初期化を開始します...サービスが開始されました。
コンソールの出力を通じて、 @Order Annotationを追加する実装クラスが最初に実行され、 @Order()の値が小さくなるほど、早く開始することがわかりました。
実際には、ApplicationRunnerを使用して同じ目的を達成でき、2つの間にほとんど違いはありません。
サンプルコード:https://github.com/ityouknow/spring-cloud-examples(ローカルダウンロード)
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。