我已将Java Tomcat应用程序部署到Heroku平台。我需要一个JDBC数据源。因此,我通过Maven war插件在“META-INF”目录中添加了一个“local”context.xml。
Heroku提供了一个系统环境变量JDBC_DATABASE_URL,当添加到context.xml时,应该可以满足我的需求。
Heroku提供了一个系统环境变量JDBC_DATABASE_URL,当添加到context.xml时,应该可以满足我的需求。
<Resource name="jdbc/postgresqldb" auth="Container" type="javax.sql.DataSource"
url="${JDBC_DATABASE_URL}"
driverClassName="org.postgresql.Driver" initialSize="5" maxWait="5000"
maxActive="120" maxIdle="5" validationQuery="select 1"
poolPreparedStatements="true"/>
然而,我无法使其正常工作,只能采用以下方法:
<Resource name="jdbc/postgresqldb" auth="Container" type="javax.sql.DataSource"
username="tzse*********" password="bea7c190************************************************"
url="jdbc:postgresql://ec2-54-163-227-202.compute-1.amazonaws.com:5432/****************?sslmode=require"
driverClassName="org.postgresql.Driver" initialSize="5" maxWait="5000"
maxActive="120" maxIdle="5" validationQuery="select 1"
poolPreparedStatements="true"/>
我基本上在这里复制并硬编码了环境变量。这样做虽然可以正常工作,但不具备可移植性,而且非常丑陋!
请问我做错了什么,我应该怎么做才能做到正确?
在Heroku控制台中,我可以看到:
2017-08-30T04:38:19.523960+00:00 app[web.1]: Aug 30, 2017 4:38:19 AM org.apache.naming.NamingContext lookup 2017-08-30T04:38:19.523961+00:00 app[web.1]: WARNING: Unexpected exception resolving reference 2017-08-30T04:38:19.523981+00:00 app[web.1]: java.sql.SQLException: Cannot create JDBC driver of class 'org.postgresql.Driver' for connect URL '${JDBC_DATABASE_URL}' 2017-08-30T04:38:19.523983+00:00 app[web.1]: at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2160)
这是不是意味着context.xml文件中对环境变量的引用根本没有引用环境变量?