【问题标题】:openshift mysql connection NumberFormatException with Tomcat 7 (JBoss EWS 2.0)openshift mysql连接NumberFormatException与Tomcat 7(JBoss EWS 2.0)
【发布时间】:2014-06-11 21:57:20
【问题描述】:
我是 openshift 的新手。我创建了一个带有 Spring Security 的示例应用程序并尝试在其中进行部署。我的 spring-database.xml 片段如下所示。
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/${env.OPENSHIFT_APP_NAME}" />
<property name="username" value="${env.OPENSHIFT_MYSQL_DB_USERNAME}" />
<property name="password" value="${env.OPENSHIFT_MYSQL_DB_PASSWORD}" />
</bean>
我在云环境中遇到以下异常。
无法获得 JDBC 连接;嵌套异常是 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:由于基础异常,无法加载连接类:'java.lang.NumberFormatException:对于输入字符串:“${env.OPENSHIFT_MYSQL_DB_PORT}”'
以下是我的 catrige/gear 配置
- Mysql 5.1
- Tomcat 7 (JBoss EWS 2.0)
任何解决方案如何克服这个问题?
【问题讨论】:
标签:
java
mysql
spring
tomcat
openshift
【解决方案1】:
对于像我这样公认的 asnwer 不适合他们的人,我使用了这个answer
我只是放了
<bean id="propertyPlaceholderChttps://stackoverflow.com/a/3965727/1460591onfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"></bean>
通过添加这样的变量进入应用程序上下文
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/${OPENSHIFT_APP_NAME}" />
<property name="username" value="${OPENSHIFT_MYSQL_DB_USERNAME}" />
<property name="password" value="${OPENSHIFT_MYSQL_DB_PASSWORD}" />
</bean>
一切都很好
【解决方案2】:
问题在于 ${env.OPENSHIFT_MYSQL_DB_HOST} 这样的表达式的使用。
这些是操作系统环境变量,正如您在异常中看到的那样,Spring 没有尝试读取这些系统环境变量的值,而是尝试将其转换为数字。
尝试使用#{systemEnvironment[OPENSHIFT_MYSQL_DB_HOST]} 之类的方法来读取操作系统环境变量。这是读取系统环境变量OPENSHIFT_MYSQL_DB_HOST的表达式。