【问题标题】:Spring loading PropertySourcesPlaceholderConfigurer from JBoss context从 JBoss 上下文 Spring 加载 PropertySourcesPlaceholderConfigurer
【发布时间】:2013-03-08 07:09:21
【问题描述】:

我有一个使用 PropertySourcesPlaceholderConfigurer 的 spring 3.1 应用程序加载设置,我想管理测试和生产环境,只需从本地文件属性中指定的服务器上下文覆盖设置加载设置。

下一个示例在 Tomcat 上运行良好,我如何在 JBoss AS 7.1 中做同样的事情?

在春季环境中,我有:

<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="localOverride" value="false" />
    <property name="locations">
        <list>
            <value>classpath:Application.properties</value>
            <value>classpath:ApplicationTest.properties</value>
        </list>
    </property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="${jdbc.driverClassName}" />
    <property name="jdbcUrl" value="${jdbc.url}" />
    <property name="user" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

在 ApplicationTest.properties(覆盖 Application.properties)中:

jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@XXXX:1521:xxxx
jdbc.username=myUsername
jdbc.password=myPassword

在 context.xml 中(在 Tomcat/conf 目录中):

<Context>
    ...
    <Parameter name="jdbc.driverClassName" value="oracle.jdbc.OracleDriver" override="false"/>
    <Parameter name="jdbc.url" value="jdbc:oracle:thin:@XXXX:1521:ProductionSID" override="false"/>
    <Parameter name="jdbc.username" value="myProductionUsername" override="false"/>
    <Parameter name="jdbc.password" value="myProductionPassword" override="false"/>
    ...
</Context>

这样,context.xml 中指定的所有参数都会覆盖 ApplicationTest.properties 中的参数。

有没有办法在 JBoss 中指定上下文参数? (即在standalone.xml 文件中)

编辑 - 已解决:

正如答案中所建议的,如果我将条目放在 WEB-INF/jboss-web.xml 中的 webapp 中,那么它可以工作:

<jboss-web>
...
    <env-entry>
        <env-entry-name>jdbc.username</env-entry-name>
        <env-entry-value>myUsername</env-entry-value>
        <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
...
</jboss-web>

但我的目标是将配置文件从 webapp 中删除。 我是这样解决的,我从 $SERVER/conf 目录加载配置文件:

<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="ignoreUnresolvablePlaceholders" value="false" />
    <property name="localOverride" value="false" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <value>classpath:Application.properties</value>
            <value>classpath:ApplicationTEST.properties</value>
            <value>file:${catalina.home}\conf\ApplicationPRODUCTION.properties</value><!-- FOR TOMCAT -->
            <value>file:${jboss.server.base.dir}\configuration\ApplicationPRODUCTION.properties</value><!-- FOR JBOSS-->
        </list>
    </property>
</bean>

如果有人知道如何将 JBOSS 配置中的参数放在 webapp 之外(如 TOMCAT),我们将不胜感激!

谢谢大家!

【问题讨论】:

    标签: java spring properties jboss7.x configuration-files


    【解决方案1】:

    根据 JBoss7 文档:

    在 AS7 中,文件 context.xml 被忽略。大部分旧的 context.xml 配置已移至 jboss-web.xml

    更多详情请见here

    在旧版本中,您可以像往常一样将这些属性添加到 context.xml - JBoss 使用 Tomcat 作为 servlet 容器。

    【讨论】:

    • 好的,但我必须将 jboss-web.xml 放在我的应用程序的 WEB-INF/ 目录中。有没有办法将此文件从我的应用程序中取出,即在 JBOSS\standalone\configuration
    【解决方案2】:

    使用jboss-web.xml 文件。该文件专门替换了 Tomcat 中的 context.xml。

    【讨论】:

      猜你喜欢
      • 2015-02-19
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多