我正在使用Spring配置文件作为我的webapp,它运行良好。
我在web.xml文件中激活这些配置文件,如下所示:
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>myProfile</param-value>
</context-param>
但我坚持使用我的MDB。
我使用SpringBeanAutowiringInterceptor从我的MDB引导spring,它可以工作,但我不知道如何为这个MDB激活我的配置文件。
我尝试添加一个env-entry但它似乎不起作用:
<env-entry>
<env-entry-name>spring.profiles.active</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>myProfile</env-entry-value>
</env-entry>
有人可以帮助我吗?
有没有办法通过beanRefContext.xml激活配置文件(由拦截器使用)?
谢谢
斯特凡
答案 0 :(得分:0)
而不是从上下文参数中查找,您可以尝试从JNDI设置它。 (默认情况下,Spring会在启动时在JNDI中查找活动配置文件。)它会查找String
数组(以逗号分隔的字符串或数组),并在密钥spring.profiles.active
答案 1 :(得分:0)
我找到了EJB拦截器的解决方法:
public class ActivateSpringProfileInterceptor {
@Resource(name = "spring.profiles.active")
private String springProfile;
@PostConstruct
@PostActivate
public void activateProfile(InvocationContext ctx) throws Exception {
if (springProfile == null || springProfile.isEmpty()) {
throw new EJBException("No spring.profiles.active env-entry is found in DD for this EJB !");
}
System.setProperty("spring.profiles.active", springProfile);
try {
ctx.proceed();
}
}
} 我把它放在我的ejb-jar.xml
中<interceptors>
<interceptor>
<interceptor-class>ActivateSpringProfileInterceptor</interceptor-class>
<env-entry>
<env-entry-name>spring.profiles.active</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>${spring.profiles.active}</env-entry-value>
</env-entry>
</interceptor>
</interceptors>
它有效,但我不想改变系统变量......
还有其他解决方法吗?