【发布时间】:2020-03-04 23:55:33
【问题描述】:
假设有一个像这样的 Spring 托管 bean:
@Component
@Profile("prod")
public class MyBean {
@Value("${x.y.id:-1}")
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
另外,x.y.id 属性确实存在于application-prod.properties 文件中。
现在,如果我想在这样的配置类中使用相同的类创建另一个具有不同配置文件的托管 bean:
@Profile("dev")
@Bean
public MyBean myBean() {
MyBean myBean = new MyBean();
myBean.setId(10);
return myBean;
}
它不起作用,因为 id 字段最终会以 -1 值结束,因为占位符的默认值具有最终确定性。
问题在这种情况下是否可以拥有第二个托管 bean?
在 application-dev.properties 中添加 x.y.id=10 确实适用于上述情况,但不适用于此情况:
@Profile("dev")
@Bean
public MyBean myBean() {
MyBean myBean = new MyBean();
myBean.setId(10);
return myBean;
}
@Profile("dev")
@Bean
public MyBean myAnotherBean() {
MyBean myBean = new MyBean();
myBean.setId(20);
return myBean;
}
【问题讨论】:
-
如果您需要设置不同的值,只需在 application-dev.properties 文件中添加 x.y.id=10
标签: java spring spring-boot