【问题标题】:Environment variables are not getting expanded in servlet.xml under JBoss环境变量在 JBoss 下的 servlet.xml 中没有得到扩展
【发布时间】:2013-09-07 02:03:55
【问题描述】:

问题: 当我在我的上下文 XML 中嵌入环境变量时,它们会在我本地运行时展开。但是当我在 OpenShift 上部署时,他们没有。它们解析为 null。

配置: web.xml:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/springapp.xml</param-value>
</context-param>

springapp.xml:

<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://#{systemProperties['OPENSHIFT_MYSQL_DB_HOST']}:#{systemProperties['OPENSHIFT_MYSQL_DB_PORT']}/prepare?characterEncoding=UTF-8"/>
        <property name="username"  value="AAA"/>
        <property name="password" value="BBB"/>
</bean>

pom.xml:

  • 春季版 3.2.0.RELEASE

本地开发环境:

  • Intellij(配置中设置的环境变量)
  • Tomcat7

OpenShift 环境:

  • Tomcat 7 (JBoss EWS 2.0)
  • OpenShift 设置的环境变量。我使用“env”命令确认了这些值。
    OPENSHIFT_MYSQL_DB_PORT=3306
    OPENSHIFT_MYSQL_DB_HOST=127.3.xxx.yyy

OpenShift 上的消息(注意服务器和端口为空):

org.apache.commons.dbcp.SQLNestedException:无法创建 JDBC 驱动程序 用于连接 URL 的“com.mysql.jdbc.Driver”类 'jdbc:mysql://:/prepare?characterEncoding=UTF-8'

【问题讨论】:

  • 在您的 repo 的 .openshift/config/context.xml 文件中预先配置了数据源。您可以使用它或作为示例。
  • 这可能是一个可行的解决方案。遗憾的是,我不知道如何将我的 sessionFactory bean 转换为使用 context.xml 中的资源。
  • Nam,我实现了你的想法。见答案。谢谢。

标签: spring jboss environment-variables web.xml openshift


【解决方案1】:

我为本地开发和 OpenShift JBoss 配置的解决方案。

我终于放弃了扩展环境变量的尝试。与直接 tomcat 一起工作得很好,但与 JBoss 完全没有关系。所以我改用了Nam的方法。

正如 Nam 所说,OpenShift 在 context.xml 中创建了正确的 jdbc 连接。所以我在本地机器上也需要同样的东西。我通过将其放置在 /usr/local/Cellar/tomcat/7.0.39/libexec/conf/context.xml 中来复制它:

<Resource name="jdbc/MysqlDS"
              url="jdbc:mysql://localhost:3306/prepare?characterEncoding=UTF-8"
              driverClassName="com.mysql.jdbc.Driver"
              username="AAA"
              password="BBB"
              auth="Container"
              type="javax.sql.DataSource"
              maxActive="20"
              maxIdle="5"
              maxWait="10000"
              />

然后我从 springapp.xml 中删除了&lt;bean id=datasource...

最后我将 sessionFactory 的 dataSource 属性更改为:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource">
        <bean class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="jdbc/MysqlDS"/>
            <property name="resourceRef" value="true"/>
        </bean>
    </property>
    <property name="packagesToScan" value="com.xxx.yyy.zzz"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLMyISAMDialect</prop>
            <prop key="hibernate.show_sql">false</prop>
        </props>
    </property>
</bean>

现在,tomcat 的 context.xml 负责本地配置。 spring bean 定义具有适当的信息。

【讨论】:

    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    相关资源
    最近更新 更多