java - 基于 Heroku Tomcat 的部署 : context. xml 环境变量

标签 java tomcat heroku heroku-postgres context.xml

我已将 Java Tomat 应用程序部署到 Heroku 平台。我需要一个 JDBC 数据源。所以我通过 maven war 插件在“META-INF”目录中添加了一个“local”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]:2017 年 8 月 30 日上午 4:38:19 org.apache.naming.NamingContext 查找 2017-08-30T04:38:19.523961+00:00 app[web.1]: 警告:意外异常解决引用 2017-08-30T04:38:19.523981+00:00 app[web.1]: java.sql.SQLException: 无法为连接 URL '${JDBC_DATABASE_URL}' 创建类 'org.postgresql.Driver' 的 JDBC 驱动程序 2017-08-30T04:38:19.523983+00:00 应用 [web.1]:在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2160)

这是否意味着 context.xml 中对环境变量的引用根本就没有引用环境变量?

最佳答案

有点晚了...但是尽管 context.xml 可能不支持环境变量(例如 $JDBC_DATABASE_URL),但它确实支持 Java 系统属性。可以将 Heroku 的环境变量作为系统属性传递给您的应用程序。

使用 Procfile (这基本上是一个带有前缀的 Java 命令)和 webapp-runner :

web: java -cp "target/dependency/*" $JAVA_OPTS -DDB_URL=$JDBC_DATABASE_URL webapp.runner.launch.Main --enable-naming --port $PORT target/*.war

这里,$JAVA_OPTS$JDBC_DATABASE_URL 都是环境变量,而-DDB_URL 将创建一个系统属性。在 context.xml 中,使用 ${DB_URL}:

<Resource name="jdbc/postgresqldb" url="${DB_URL}" .../>

关于java - 基于 Heroku Tomcat 的部署 : context. xml 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45952212/

相关文章:

java - 为什么 Object.hashCode() 不遵循 Java 代码约定

java - 为具有 Restful 服务和 Swing 特性的基于 Maven 的动态项目构建可执行的 war/jar

javascript - 如何防止 vendor Assets 每次都被预编译?

java - 异步 EJB 3.1 方法和事务

java - 如何在单击 JButton 时显示 JPanel?

tomcat - 在 Intellij IDEA 中,我选择更新 tomcat 应用程序,然后重新部署。需要很长时间,为什么?

tomcat - webdav tomcat配置

java - 连接到 StompClient 时我可能在哪里出错?

security - Heroku 应用程序在 VPN 上调用外部 Web 服务

java - 从java程序运行linux命令txl