[]カスタム注釈の春の雲春の雲@SpringCloudProfile、注釈は@Profileを達成します

まず、なぜこの注釈の定義を思うだろう@SpringCloudProfile

注@Profileホーム言及:これは主にのみ、指定の環境でクラスの効果を指定し、マルチ環境設定春ブーツと一緒に使用され、このよう闊歩構成としてのみ、開発者が開発することができますし、テスト環境、オンラインニーズの使用を禁止。

次のように@Profile使用:

@設定
@ EnableSwagger2 
@Profile({ "DEV"、 "テスト"})
パブリック クラスSwagger2Config { @豆 公共ドケットドケット(){ リターン 新しいドケット(DocumentationType.SWAGGER_2).apiInfo(apiInfo())。選択() // 当前包路径 .apis(RequestHandlerSelectors.basePackage(" com.zbq.springbootbase.controller " )) 。.paths(PathSelectors.any())ビルド(); } // ビルドのAPIドキュメントは、機能の詳細を プライベートApiInfo apiInfo(){ 返す 新しい新しいApiInfoBuilderを() // ページタイトル .TITLE(" RESTfulなを構築するためにspringboot-ベース・フレーム、Swagger2使用API " // 創始者 が.contact(新しい新しい名刺(" ボー清"" [email protected] """ )) // バージョン番号 .version(" 1.0 " // 説明 .DESCRIPTION(" API描述" .build()。 } }

しかし、物流センターの使用で春クラウド、ノート@Profile障害のために、プロジェクトのリードを開始するときに無指定spring.profiles.activeプロパティで結果では、その理由は、プロパティ値spring.profiles.active環境変数を取得することにより、@Profileをされ、注釈を設定します値は、それが力に含まれて、比較されます。

達成するための環境変数で春の雲の変化にすべての必要性は、まさに一般的にこれらの値を、DEV、テスト、PRODを持って、設定環境を読み込み、指定された中央部を構成するために使用され、この変数を、spring.cloud.config.profile

第二に、達成するためのカスタム注釈@SpringCloudProfile

1)@SpringCloudProfileコメントの定義を

/ * *
 * @author zhangboqing
 * @date 2019年11月12日
 * /
@Target({ElementType.TYPE、ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(SpringCloudProfileCondition。クラスパブリック@interface SpringCloudProfile {

    / * *
     *注釈付きコンポーネントを登録する必要のあるプロファイルのセット。
     * /
    文字列[]の値();

}

2)SpringCloudProfileConditionクラスのための整合条件を達成

/ * *
 * @author zhangboqing
 * @date 2019年11月12日
 * / 
パブリック クラスSpringCloudProfileConditionが実装条件{

    公共の 静的な最終文字列ACTIVE_PROFILES_PROPERTY_NAME = spring.cloud.config.profile 

    @オーバーライド
    パブリックブールマッチ(ConditionContextコンテキスト、AnnotatedTypeMetadataメタデータ){
        MultiValueMap <文字列、オブジェクト> ATTRS = metadata.getAllAnnotationAttributes(SpringCloudProfile クラス.getName())。
        もし(!attrsを= ヌル){
             のために:(。ATTRSオブジェクトの値を取得" " {))
                 であれば(acceptsProfiles(文脈、(String []型)値)){
                     返す 
                }
            }
            リターン はfalse ;
        }
        返す ;
    }

    パブリックブールacceptsProfiles(ConditionContextコンテキスト、文字列...プロファイル){
        Assert.notEmpty(プロファイルは、少なくとも一つのプロファイルを指定する必要があります);
        以下のための{:(プロファイル文字列プロファイル)
             の場合(StringUtils.hasLength(プロファイル)&& profile.charAt(0)== ' ' ){
                 場合(!(profile.substring isProfileActive(コンテキスト、1 ))){
                     返す 
                }
            }
            それ以外の 場合(isProfileActive(コンテキスト、プロファイルは)){
                 返す 
            }
        }
        リターン はfalse ;
    }

    保護されたブールisProfileActive(ConditionContextコンテキスト、文字列プロファイル){
        validateProfile(プロファイル)。
        文字列プロパティ = context.getEnvironment()のgetProperty(ACTIVE_PROFILES_PROPERTY_NAME)。
        リターンproperty.equals(プロファイル)。
    }

    保護された 無効validateProfile(文字列プロファイル){
         場合(!StringUtils.hasText(プロファイル)){
             スロー 新しい例外:IllegalArgumentException(" 無効なプロファイル[ " +プロフィール+ " ]:テキストが含まれている必要があります" );
        }
        もし(profile.charAt(0)== ' ' ){
             スロー 新しい(、IllegalArgumentExceptionを" 無効なプロファイル[ " +プロフィール+ " :]!とオペレータ開始してはなりません" ;)
        }
    }
}

 

おすすめ

転載: www.cnblogs.com/756623607-zhang/p/11846205.html