私のプロジェクトには、@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 でプロパティを設定する簡単な方法はありますか?