更改persistence.xml以使用PostgreSQL而不是MySQL

时间:2018-05-29 14:19:47

标签: java mysql spring postgresql heroku

我是新来的,我用这个网站寻找答案很长一段时间,但这是我第一次提出问题。 我想使用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>

如何更改它以使其有效?非常感谢你提前。

1 个答案:

答案 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 appHeroku documentation中还有很多例子,包括一个用于Spring XML配置的例子。