【问题标题】:Changing persistence.xml to use PostgreSQL instead of MySQL更改 persistence.xml 以使用 PostgreSQL 而不是 MySQL
【发布时间】:2018-11-08 05:56:48
【问题描述】:

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

如何更改它以使其正常工作?非常感谢您提前。

【问题讨论】:

    标签: java mysql spring postgresql heroku


    【解决方案1】:

    persistence.xml 不支持您发现的环境变量。您需要在代码中执行此操作,例如:

    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 配置。

    【讨论】:

    • 谢谢。公平地说,这对我来说似乎太复杂了,我决定改用 Spring Boot,然后我设法在 Heroku 上部署了我的应用程序。它有效,但现在我有另一个问题stackoverflow.com/questions/50631388/…
    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2017-10-24
    • 2020-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多