Изменение файла persistence.xml для использования PostgreSQL вместо MySQL - PullRequest
0 голосов
/ 29 мая 2018

Я новичок здесь, я использовал этот сайт, чтобы долго искать ответы, но я впервые хотел бы задать вопрос.Я хочу развернуть приложение Spring (не Spring Boot) с помощью Heroku.Я нашел очень хороший учебник (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 голосов
/ 29 мая 2018

persistence.xml не поддерживает переменные env, как вы обнаружили.Вам нужно будет сделать это в коде, что-то вроде:

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);

Вот пример соответствующего приложения .В документации Heroku также есть много примеров, включая один для конфигурации Spring XML.

...