時々必要プリロードデータ(定数データで、例えばコンフィギュレーションデータ)スプリング・ブート・インターフェースを提供するために使用することができ、プロジェクト内のプロジェクトの開始後CommandLineRunner
新CommandLineRunnerクラスがインタフェースを実装し、@Componentコメントを使います
@Component @Order( 1 ) 公共の クラスを ConstantPreloading 実装CommandLineRunner { プライベート 静的 最終ロガーLOGGER = LoggerFactory.getLogger(。ConstantPreloading クラス); @Override 公共 ボイド RUN(文字列... argsが)スロー例外{ logger.info(「==を=======プリロード情報==============定数" ); } }
図1に示すように、複数の操作が必要な予圧プロジェクト場合、CommandLineRunner実装クラスとインタフェースを複数作成することができ、ばねブートが自動的にビーンCommandLineRunnerインターフェイスを実装し、順次実行走査します。
図2に示すように、ソースビューから@Order注釈が使用されている実行優先度によって必要に応じてランナー複数の、小さい方の値より高い(ソース方法AnnotationAwareOrderComparator.sort(ランナー)でソーティング)優先順位。
次のようにランナーがorg.springframework.boot.SpringApplication.callRunners(ApplicationContextの、ApplicationArguments)、コードの一部によって実行されます
プライベート 無効callRunners(ApplicationContextのコンテキスト、ApplicationArgumentsの引数){ リストの<Object>ランナー= 新しい ArrayListを<> (); runners.addAll(。context.getBeansOfType(ApplicationRunner クラス).values()); runners.addAll(。context.getBeansOfType(CommandLineRunner クラス).values()); AnnotationAwareOrderComparator.sort(ランナー)。 用(オブジェクトランナー:新しい LinkedHashSetの<> (ランナー)){ 場合(ランナーのinstanceof ApplicationRunner){ callRunner((ApplicationRunner)ランナー、引数)。 } であれば(ランナーのinstanceof CommandLineRunner){ callRunner((CommandLineRunner)ランナー、引数)。 } } }