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)。 } }