2016-03-28 2 views
8

私は1つ以上のカスタムプロパティーソースローダーを作成し、アプリケーションで@ConfigurationPropertiesのプロパティーソースを使用することに興味があります。@ConfigurationPropertiesで使用するカスタムXMLベースのプロパティーソースローダー

たとえば、XMLファイルを読み込んで、それを@Configuration注釈付きクラスに挿入できるプロパティのセットに変換できるプロパティーソースローダーを開発したいと考えています。

@Configuration 
@ConfigurationProperties(locations="classpath:config.xml") 
public class MyConfig 
{ 
    ... 
} 

このようなXMLベースのプロパティーソースローダーは公開されていますか?そうでなければ、私はそれを実装した後、どのように私のアプリケーションに利用可能にするつもりですか?

ありがとうございます。

+0

理論的には、プロパティファイルはxmlとプレーンプロパティ形式で表現できるので、ボックスの外でも動作するはずです。カスタムフォーマットが必要な場合は、独自の 'PropertySourceLoader'ま​​たは' ApplicationContextInitializer'を記述してファイルをあらかじめロードする必要があります。 –

答えて

3

YamlPropertySourceLoaderの実装方法を確認できます。あなたはそれを実装すると方法

org.springframework.boot.env.YamlPropertySourceLoader#getFileExtensions 

は、あなたが何か

このような
@ConfigurationProperties(locations="classpath:config.xml") 

しかしYamlPropertySourceLoaderの実装を見てを追加したら、あなたはなどペアリングして、やるべき仕事がたくさんありますように見える呼び出されます

それはあなたに構造化されたプロパティを作成する可能性を与えますので、YAMLはあなたのために十分であろうかどうかをチェックする必要があります

例えば、トンを彼は、次のYAMLドキュメント:

environments: 
    dev: 
     url: http://dev.bar.com 
     name: Developer Setup 
    prod: 
     url: http://foo.bar.com 
     name: My Cool App 

は、これらのプロパティに変換されます:

environments.dev.url=http://dev.bar.com 
environments.dev.name=Developer Setup 
environments.prod.url=http://foo.bar.com 
environments.prod.name=My Cool App 

YAMLリストは、[インデックス] dereferencersを持つプロパティのキーとして表現され、例えばこのYAML:

my: 
    servers: 
     - dev.bar.com 
     - foo.bar.com 

これらのプロパティに変換されます:

my.servers[0]=dev.bar.com 
my.servers[1]=foo.bar.com 

XMLドキュメントを準備していて、それを構成にロードする理由があっても、XMLをYAML(https://github.com/FasterXML/jackson-dataformat-xml)に変換し、既存のYamlPropertySourceLoaderを使用して独自のPropertySourceLoaderを作成するよりも簡単です。

関連する問題