2017-05-17 7 views
0

私はスプリングブートに問題があり、ドット区切りキーからネストマップを作成しています。本質的にはhereと記載されているのと同じ問題ですが、そこに示唆されている解決策は私のためには機能しません。私はSpring Boot 1.5.3.RELEASEを使用しています。マイapplications.ymlファイルには、これを含んでいますSpringブートがapplication.ymlのドット区切りキーからネストマップを作成しないようにしますか?

props: 
    webdriver.chrome.driver: chromedriver 

マイConfigクラス:春ブーツはYAMLファイルを処理した後

@Configuration 
@EnableConfigurationProperties 
public class SpringConfig { 
    private Map<String, String> props = new HashMap<>(); 

    @ConfigurationProperties(prefix = "props") 
    public void setProps(Map<String, String> props) { 
    this.props = props; 
    } 

    @ConfigurationProperties(prefix = "props") 
    @Bean(destroyMethod="", name = "props") 
    public Map<String, String> getProps() { 
    return props; 
    } 
} 

残念ながら、ドットが分離キーは、サブマップに分割されます。 getPropsをcalligからの結果()とSystem.outに結果を印刷するには、次のようになります

{webdriver={chrome={driver=chromedriver}}} 

私は、Propertiesに小道具フィールドのタイプを変更Map<String, Object>などを試してみたが、何も任意の違いを確認するようです。 私は自分が望むことを達成するために解析動作を操作する方法を見つけませんでした。どんな助けでも大歓迎です。私はこれ以上の時間を費やしました。コードを見れば、私は盲目的になるでしょう。

答えて

0

多くの実験の後、これが動作するように見えた:

@Configuration 
@EnableAutoConfiguration 
@EnableConfigurationProperties 
@ConfigurationProperties 
public class SpringConfig { 
    private Properties info = new Properties(); 

    public Properties getProps() { 
     return info; 
    } 
    } 
} 

しかし、私はそれ以外の春ブーツプロパティが入れ子になるだろう、YAMLエントリの周りに単一引用符を入れていた:

props: 
    'webdriver.chrome.driver': chromedriver 
    'foo.bar.baz': foobarbaz 

カップルは私が気づいたことのプロパティのgetter(この場合はgetProps())はpublicとして宣言し、YAMLでバインドしようとしているプロパティキーと一致する必要があります。私。キーは「小道具」なので、getterはgetProps()と呼ばれる必要があります。私はそれが論理的で、どこかで文書化されていると思うが、それは何とか私をスリップさせた。私は@ConfigurationProperties注釈で接頭辞= "foobar"を使うと思っていましたが、そうではありませんでしたが、そうであるようです。私はRTFMする必要がありますね;-)

2

YamlMapFactoryBeanを試してみると、マップとしてYAMLが読み込まれます。

@Bean 
public YamlMapFactoryBean yamlFactory() { 
    YamlMapFactoryBean factory = new YamlMapFactoryBean(); 
    factory.setResources(resource()); 
    return factory; 
} 

public Resource resource() { 
    return new ClassPathResource("application.yml"); 
} 

public Map<String, String> getProps() { 
    props = yamlFactory().getObject(); 
return props; 
} 

出力は

props{webdriver.chrome.driver=chromedriver}

+0

おかげ@Mohankumarが見えます。私は多くの試行錯誤の後、上記のコードで動作させることができました。 – user2337270

関連する問題