我的项目有一个依赖项,需要设置一个可以通过@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
我试过这样做,但它不起作用。作为一种解决方法,我创建了三个不同的 .properties 文件(myprops.properties、myprops-staging.properties 等)并使用三个不同的 @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;
}
}
是否可以将我的 PropertiesFactoryBean 配置为从 application.yml 读取值?如果没有,是否有更简单的方法来使用 JavaConfig 配置属性?