在EJB中激活spring配置文件

时间:2013-07-18 07:07:49

标签: spring ejb profile interceptor

我正在使用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激活配置文件(由拦截器使用)?

谢谢

斯特凡

2 个答案:

答案 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>

它有效,但我不想改变系统变量......

还有其他解决方法吗?