1

我正在为我的 webapp 使用 Spring 配置文件,效果很好。

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

谢谢

斯蒂芬妮

4

2 回答 2

0

我找到了 EJB Interceptors 的解决方法:

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>

它可以工作,但我宁愿不更改系统变量......

还有其他解决方法吗?

于 2013-07-18T14:36:32.053 回答
0

您可以尝试从 JNDI 设置它,而不是从上下文参数中进行设置。(默认情况下,Spring 在启动时在 JNDI 中查找活动配置文件。)它查找一个String数组(逗号分隔的字符串或数组)并在键下查找它spring.profiles.active

于 2013-07-18T10:48:20.163 回答