工場モデル - エンタープライズマイクロチャネルアプリケーション・コンフィギュレーション・コードの最適化

A.なぜコードを最適化するために、工場出荷時のモデルを使用

  そのような企業プッシュメッセージ内のマイクロチャネルなど、既存のエンタープライズアプリケーション、マイクロチャネル、異なるアプリケーション構成のID、複数の異なるアプリケーションの様々なカスタマイズが必要な構成は、通常@ComfigurationPropertiesプロファイル設定を読み取るために使用し、その後されコンフィギュレーション・クラス@Autowiredタスクに関連する異なる噴射タイミングを用いて、このような欠点、構成、および結合の異なるタスクのタイミングがあるが高すぎる、複数のアプリケーションは、生成するために異なる構成工場の使用をベース井戸管理が配置されています構成およびタイミングタスク、異なる構成管理との間の結合を低減する構成、。

 

II。最適化されたコードの前に

@data 
@Component 
@ConfigurationProperties(接頭辞 = "wxapp1" パブリック クラスWxApp1 { 

    / ** エンタープライズ同上* / 
    プライベート文字列corpid; 

    / ** エンタープライズキー* / 
    プライベート文字列corpsecret; 

    / ** エンタープライズアプリケーションID * / 
    プライベート整数agentIdが; 

    / ** メッセージのプッシュURL * / 
    プライベート文字列sendMessageUrl; 
}
@data 
@Component 
@ConfigurationProperties(接頭辞 = "wxapp2" パブリック クラスWxApp2 { 

    / ** エンタープライズ同上* / 
    プライベート文字列corpid; 

    / ** エンタープライズキー* / 
    プライベート文字列corpsecret; 

    / ** エンタープライズアプリケーションID * / 
    プライベート整数agentIdが; 

    / ** メッセージのプッシュURL * / 
    プライベート文字列sendMessageUrl; 
}

関連ニュースをプッシュ

SLF4J @ 
@Component 
パブリック クラスWxMessageTask { 

    @Autowired 
    プライベートWxApp1のAPP1。

    @Scheduled(クーロン = "0 0 10 1/1 *?" 公共 ボイドpushMessage(){ 
        app1.xxx 
        ..... 
        ..... 
    }    

III。コード最適化後

エンタープライズマイクロチャネルアプリケーション列挙クラス

@Getter 
@AllArgsConstructor 
パブリック 列挙WxAppEnum { 

    CORP_DAILY( 1、 "アプリ1"。 

    WG_DATA( 2、 "アプリケーション2" ); 

    / ** エンタープライズマイクロチャネルコード* / 
    プライベート int型のコード;
     / ** エンタープライズアプリケーションマイクロチャネル* / 
    プライベート・ストリングwxAppName; 
}

スプリングBean名を注入する企業のマイクロチャネル構成列挙CONFIGNAME

@Getter 
@AllArgsConstructor 
パブリック 列挙  WxAppConfigEnum { 

    WG_DATA_CONFIG(WxAppEnum.WG_DATA、 "wgDataWechatConfig" )、
    CORP_DAILY_CONFIG(WxAppEnum.CORP_DAILY、 "corpWechatConfig" )。

    プライベートWxAppEnum wxAppEnum。
    プライベート文字列CONFIGNAME。

    / ** 
     *获取微信应用配置枚举
     * @param VALUENAME 
     * @return 
     * / 
    パブリック 静的WxAppConfigEnum valueOfConfigName(文字列VALUENAME){
         戻り Stream.of(値())。フィルタ(X-> x.getConfigName()。等号(VALUENAME))
                .findFirst()
                .orElse(NULL )。
    } 

    / ** 
     *获取微信应用枚举
     * @param VALUENAME 
     * @return 
     * / 
    パブリック 静的WxAppEnum getWxAppEnum(文字列VALUENAME){ 
        オプション <WxAppConfigEnum>オプション= Optional.ofNullable(valueOfConfigName(VALUENAME))。
        リターン optional.isPresent()optional.get()getWxAppEnum():?。ヌル; 
    } 
}

工場出荷時の設定

@data 
@Component 
パブリック クラスWxAppConfigFactory { 

    パブリック 静的 最終地図<WxAppEnum、IWxAppBaseConfig> configMap = 新規 HashMapの<> (); 

    @Autowired 
    民間のApplicationContextのApplicationContext。

    / ** 
     *初始化微信应用配置
     * / 
    @PostConstruct 
    公共 のinit(){ 
        applicationContext.getBeansOfType(IWxAppBaseConfig。クラス
                .entrySet()
                .stream()
                .filter(X - !> ObjectUtil.isNull(WxAppConfigEnum.valueOfConfigName(X .getKey())))
                (X .forEach - >configMap.put(WxAppConfigEnum.getWxAppEnum(x.getKey())、x.getValue()))。
    } 

    / ** 
     *获取配置
     * @param のConfigValue 
     * @return 
     * / 
    パブリック 静的IWxAppBaseConfig GETCONFIG(WxAppEnumのConfigValue){
         リターンconfigMap.get(のConfigValue)。
    } 
}

 

おすすめ

転載: www.cnblogs.com/gabriel-y/p/12311866.html