4

私のプロジェクトには、@Value アノテーションで読み取ることができるプロパティ オブジェクトのセットを必要とする依存関係があります。

@Value("#{myProps['property.1']}")

JavaConfig でこれを行うには、以下を使用しています。

@Bean(name="myProps")
public static PropertiesFactoryBean mapper() {
    PropertiesFactoryBean bean = new PropertiesFactoryBean();
    bean.setLocation(new ClassPathResource("myprops.properties"));
    return bean;
}

これは期待どおりに機能します。私のプロパティは次のようになります。

property.1=http://localhost/foo/bar
property.2=http://localhost/bar/baz
property.3=http://localhost/foo/baz

このプロジェクトには Spring Boot を使用しているので、次のようなことができるようになりたいです。

myprops.properties:
    property.1=${base.url}/foo/bar
    property.2=${base.url}/bar/baz
    property.3=${base.url}/foo/baz

次に、さまざまなプロファイルに基づいて base.url を構成できます。

application.yml:

    base:
      url: http://localhost

    ---
    spring:
      profiles: staging
    base:
      url: http://staging

    ---
    spring:
      profiles: production
    base:
      url: http://production

私はこれをやろうとしましたが、うまくいきません。回避策として、3 つの異なる .properties ファイル (myprops.properties、myprops-staging.properties など) を作成し、それらに 3 つの異なる @Configuration クラスをロードしました。これは機能しますが、面倒なようです。

@Configuration
public class DefaultConfiguration {

    @Bean(name="myProps")
    public static PropertiesFactoryBean mapper() {
        PropertiesFactoryBean bean = new PropertiesFactoryBean();
        bean.setLocation(new ClassPathResource("myprops.properties"));
        return bean;
    }
}

@Configuration
@Profile("staging")
public class StagingConfiguration {

    @Bean(name="myProps")
    public static PropertiesFactoryBean mapper() {
        PropertiesFactoryBean bean = new PropertiesFactoryBean();
        bean.setLocation(new ClassPathResource("myprops-staging.properties"));
        return bean;
    }
}

@Configuration
@Profile("production")
public class ProductionConfiguration {

    @Bean(name="myProps")
    public static PropertiesFactoryBean mapper() {
        PropertiesFactoryBean bean = new PropertiesFactoryBean();
        bean.setLocation(new ClassPathResource("myprops-production.properties"));
        return bean;
    }
}

application.yml から値を読み取るように PropertiesFactoryBean を構成することは可能ですか? そうでない場合、JavaConfig でプロパティを設定する簡単な方法はありますか?

4

2 に答える 2

1

あなたが実際に何をしているのかは 100% わかりませんし、何がうまくいかないとは言いませんが、外部構成用に YAML とプロパティ形式を混在させたいと思われますか? 「application.yml」だけを使用しないのはなぜですか? そのようなことをしていて、何らかの理由でプロパティファイルも使用する必要@PropertySourceがある場合は、ソースファイルの1つで使用しSpringApplicationます(値が解決されたときにプレースホルダーを置き換える必要があると思います)。

于 2014-02-05T14:07:36.273 に答える