プリロード・データプロジェクトはCommandLineRunnerを使用して開始した後、

時々必要プリロードデータ(定数データで、例えばコンフィギュレーションデータ)スプリング・ブート・インターフェースを提供するために使用することができ、プロジェクト内のプロジェクトの開始後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)ランナー、引数)。
            } 
        } 
    }

 

おすすめ

転載: www.cnblogs.com/xiaoweiv/p/11237683.html