我是新来的,我用这个网站寻找答案很长一段时间,但这是我第一次提出问题。 我想使用Heroku部署我的Spring(而不是Spring Boot)应用程序。 我找到了一个非常好的教程(https://github.com/Abdallah-Abdelazim/yt-heroku-demo/blob/master/README.txt),但它只展示了如何使用Spring Boot应用程序。他的application.properties文件如下所示:
spring.datasource.url=${JDBC_DATABASE_URL}
spring.datasource.username=${JDBC_DATABASE_USERNAME}
spring.datasource.password=${JDBC_DATABASE_PASSWORD}
spring.jpa.show-sql=false
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
我认为我应该做的是相应地编辑我的persistence.xml。我做了类似的事,但它没有工作:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="passwordsPersistenceUnit">
<properties>
<property name="javax.persistence.jdbc.url"
value="${JDBC_DATABASE_URL}"/>
<property name="javax.persistence.jdbc.user" value="${JDBC_DATABASE_USERNAME}"/>
<property name="javax.persistence.jdbc.password" value="${JDBC_DATABASE_PASSWORD}"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="hibernate.enable_lazy_load_no_trans" value="true"/>
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
如何更改它以使其有效?非常感谢你提前。
答案 0 :(得分:0)
persistence.xml
不支持您发现的env vars。您需要在代码中执行此操作,例如:
Map<String, String> env = System.getenv();
Map<String, Object> configOverrides = new HashMap<String, Object>();
for (String envName : env.keySet()) {
if (envName.contains("JDBC_DATABASE_URL")) {
configOverrides.put("javax.persistence.jdbc.url", env.get(envName));
}
}
entityManagerFactory = Persistence.createEntityManagerFactory("prod", configOverrides);
这是一个相关的example app。 Heroku documentation中还有很多例子,包括一个用于Spring XML配置的例子。