【发布时间】:2016-07-22 14:28:35
【问题描述】:
是否可以根据我传递给应用程序的参数来控制我的应用程序上下文中的 Spring bean 是否被实例化?
示例:
如果我在
中设置了弹簧配置文件ANT 的 build.xml jvmarg 为:
-Dspring.profiles.active=P1,P2
对于配置类中的以下代码sn-p:
@Bean
@Profile({"!P1", "!P2"})
public String P3() {
String s = "Check1:P3";
System.out.println(s);
return s;
}
@Bean
@Profile({"!P1", "!P3"})
public String P2() {
String s = "Check2:P2";
System.out.println(s);
return s;
}
@Bean
@Profile({"!P2", "!P3"})
public String P1() {
String s = "Check3:P1";
System.out.println(s);
return s;
}
@Bean
@Profile("P3")
public String P3_1() {
String s = "Check4:P3";
System.out.println(s);
return s;
}
@Bean
@Profile("P1")
public String P1_1() {
String s = "Check5:P1";
System.out.println(s);
return s;
}
@Bean
@Profile("P2")
public String P2_1() {
String s = "Check6:P2";
System.out.println(s);
return s;
}
我得到的输出为:
Check2:P2
Check3:P1
Check5:P1
Check6:P2
这是正确的。
但是当我将 build.xml 中的配置文件设置为:
-Dspring.profiles.active=P1
Output:
Check1:P3
Check2:P2
Check3:P1
Check5:P1
但按照我的预期,我希望得到如下输出:
Check3:P1
Check5:P1
(即)只有 P1() bean 在运行时启动。
如果@Profiles 可以的话,有人可以建议我吗? 我可以根据配置文件的排除规则控制运行时启动的bean吗? 或者我怎样才能做到这一点?
基本要求是是否有 'n' 个 bean。我可以根据传递给环境/服务器目标的参数控制 1 个 bean 在运行时启动。
我正在尝试使用可被不同环境使用的共享代码(所有 bean 都已定义)?
【问题讨论】:
标签: java spring spring-boot