序文
プロジェクトで柔軟に構成するために、構成ファイルを使用することがよくあります。一般的な構成ファイルは、XMLやプロパティなどです。 Springbootを使用すると、プロパティとYAMLファイルを外部構成として使用できます。 YAML言語に対するコンパイラのサポートは現在十分ではなく、プロパティファイルはまだ外部構成として使用されています。
Spring Cloud Configが発売される前に、ZKベースの構成センターを実装し、ローカルプロパティ構成ファイルを排除しました。原則は非常に単純ですが、PropertyPlaceHolderConfigurerのmergeProperties()を過負荷にしました。
/***マージプロパティの実装にオーバーロード*最初にファイルプロパティをロードし、次にZK Configuration Centerによって読み取られたプロパティにマージ** @return合併したプロパティコレクション* @Throws IOException Exception*/ @OverrideTected Properties MergeProperties()Throws IOException {Properties result = new Properties(); //親クラスの構成をロードしますMergeProperties = super.mergeproperties(); result.putall(mergeproperties); //構成をロードZK Map <String、String> Configs = loadzkConfigs()から読み取ります。 result.putall(configs); return result;}この実装は春のプロジェクトで非常に簡単に使用できますが、最近ではSpring-Bootプロジェクトの中には、このプレースホルダーの実装とSpring Bootの@ConfigurationProperties(prefix = "xxx")うまく機能しないことがわかりました。
つまり、プロパティは解決されておらず、@Valueの方法で読み取ることができますが、@Valueには多くのプロパティがある場合は、まだかなり面倒です。私はまだ@ConFigurationPropertiesのプレフィックスを使用する傾向があります。だから私はSpring Bootドキュメントを見て、そのpropertySourceを見つけました
注文:
* DevTools Home Directoryのグローバル設定プロパティ(〜/.Spring-Boot-devtools.properties devtoolsがアクティブな場合)。
* @TestPropertySourceテストでの注釈。
* @Springboottest#プロパティアノテーション属性のテスト。
*コマンドライン引数。
* spring_application_jsonのプロパティ(環境変数またはシステムプロパティに埋め込まれたインラインJSON)
* ServletConfig initパラメーター。
* ServletContext initパラメーター。
* JavaのJndi属性:comp/env。
* Java System Properties(System.GetProperties())。
* OS環境変数。
*ランダムにプロパティのみを備えたランダムバルエポロパルティソース。*。
*パッケージJARの外側のプロファイル固有のアプリケーションプロパティ(Application- {profile} .propertiesおよびyamlバリアント)
* JAR内にパッケージ化されたプロファイル固有のアプリケーションプロパティ(application- {profile} .propertiesおよびyamlバリアント)
*パッケージジャーの外側のアプリケーションプロパティ(Application.PropertiesおよびYAMLバリアント)。
* jar内にパッケージ化されたアプリケーションプロパティ(application.propertiesおよびyamlバリアント)。
* @configurationクラスの@propertysourceアノテーション。
*デフォルトのプロパティ(SpringApplication.setDefaultPropertiesを使用して指定)。
Javaシステムプロパティのプロパティを確認できることを見つけることは難しくありません。つまり、MergePropertiesによって読み取られたプロパティをJavaシステムのプロップに書き込み、ソースコードを見て、エントリポイントを見つけてください。
/***過負荷プロパティの実装*オプションに従って、システムプロパティにマージされたプロップを書き込むかどうかを決定します。 Spring Bootが必要です * * @Param BeanFactoryToprocess * @Param Props Merged Properties * @Throws BeanSexception */ @ @OverRideRideProtected Void ProcessProperties(configureablelistablebeanFactory BeanFactoryToprocess、Properties Props)Beansexception小道具); // System Propertyに書き込みif(writePropStosystem){// Spring Boot Enumeration <?> propertyNames = props.propertynames(); while(propertynames.hasmoreElements()){string propertyname =(string)propertynames.nextelement(); string propertyValue = props.getProperty(propertyName); System.SetProperty(PropertyName、PropertyValue); }}}過度の影響を避けるために、システムのプロパティを書き込むようにスイッチが設定されています。 Spring Bootプロジェクトの場合は、オンラインの非スプリングブートプロジェクトへの影響を最小限に抑えるためにオンにします。次に、Spring Bootの@ConfigurationPropertiesプロパティを完全に読み取ります。
特定のコードを参照してください: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessorを参照してください
@OverridePublicオブジェクトPostProcessBeForeInitialization(Object Bean、String BeanName)Throws BeanSexception {configurationProperties Annotation = annotationutils .findannotation(bean.getclass()、configurationProperties.class); if(annotation!= null){postprocessbeforeInitialization(bean、beanname、annotation); } annotation = this.beans.findfactoryannotation(beanname、configurationProperties.class); if(annotation!= null){postprocessbeforeInitialization(bean、beanname、annotation); } return bean;}要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。