在JBoss下的servlet.xml中没有扩展环境变量

时间:2013-09-03 18:23:18

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

问题: 当我在我的上下文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:

  • Spring version 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的://:/制备的characterEncoding = UTF-8'

1 个答案:

答案 0 :(得分:1)

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

我终于放弃了尝试扩展env变量。与直接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中删除了<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定义具有适当的信息。