我正在开发一个弹簧启动应用程序。我们有每个环境的属性文件(dev、int、qa、prd 等)。至于 bean,有些需要以不同的方式创建以用于生产。所以我们有这样的配置:
@Configuration
class MyBeans {
@Bean(name="someBean")
@Profile("prd")
MyBean someBeanProd() {
...
}
@Bean(name="someBean")
MyBean someBeanDev() {
...
}
}
MyBean 自动装配如下:
@Component
public class SomeService
{
@Autowired
private MyBean someBean;
}
启动应用程序时:
-Dspring.profiles.active=prd
正在调用“someBeanProd”方法(如预期的那样),并且正在加载相关的属性文件(application-prd.properties)。对于任何其他配置文件“someBeanDev”正在被调用(如预期的那样)并加载相关的属性文件。
但是,如果我如下更改配置中方法的顺序,则始终调用“someBeanDev”方法(即使活动配置文件为 prd),但正在使用正确的属性文件。
@Configuration
class MyBeans {
@Bean(name="someBean")
MyBean someBeanDev() {
...
}
@Bean(name="someBean")
@Profile("prd")
MyBean someBeanProd() {
...
}
}
这是正确/预期的行为吗?无论配置文件中方法的顺序如何,我都希望 spring 创建正确的 bean。
有没有办法为一个配置文件定义一个bean,并且任何其他配置文件都应该回退到“默认”配置文件?
在不同的 Java 配置类中创建 prd bean 也不起作用。