Как развернуть приложение Spring с помощью Postgresql в Heroku с помощью Spring Boot?

StackOverflow https://stackoverflow.com//questions/23041164

Вопрос

Я оцениваю Spring 4 на Heroku и пока очень впечатлен обоими.

Однако у меня возникли проблемы с запуском приложения Spring Boot на Heroku.Все работает нормально, кроме Postgresql (я просто получаю Connection Refused ошибки).

Проблема наверняка будет связана с тем, как я настраиваю DataSource но до сих пор я просто следовал методу проб и ошибок!Я не совсем уверен, как мне настроить источник данных из Heroku. DATABASE_URL и я не могу найти примеров.

я нашел весеннее облако случайно, выполнив поиск в Google, который выглядит многообещающе, но ничего не объясняет о DATABASE_URL.Кроме того, он даже не упоминается в Spring.IO, поэтому мне интересно, возможен ли вообще этот вариант для промышленного использования?

Это было полезно?

Решение

Весеннее облако — хороший вариант.Я не знаю, почему он не указан в Spring.io — так и должно быть, возможно, он еще не совсем вышел из инкубации или что-то в этом роде, но я успешно его использовал.Если вам не нравится это использовать, я думаю, вы можете просто установить spring.datasource.url значению, которое Heroku дает вам в своей переменной окружения.

Другие советы

Вы можете использовать Конфигурационные переменные который можно настроить на вкладке настроек вашего приложения в Heroku.Переменные конфигурации будут доступны вашему приложению как переменные среды.Поскольку Spring Boot может сопоставлять переменные среды со свойствами приложения, вам просто нужно установить:

SPRING_DATASOURCE_URL
SPRING_DATASOURCE_USER
SPRING_DATASOURCE_PASSWORD
SPRING_DATASOURCE_DRIVER-CLASS-NAME

И они будут сопоставлены с:

spring.datasource.url
spring.datasource.user
spring.datasource.password
spring.datasource.driver-class-name

Теперь все, что вам нужно сделать, это извлечь соответствующие значения.Полную конфигурацию базы данных можно проверить на Панель управления Heroku Postgres.Выберите базу данных, к которой вы хотите подключиться, и вы увидите значения для SPRING_DATASOURCE_USER и SPRING_DATASOURCE_PASSWORD сразу.А SPRING_DATASOURCE_URL должен быть построен следующим образом:

jdbc:postgresql://<Host>:<Port>/<Database>

Где <Host>, <Port> и <Database>необходимо заменить соответствующими значениями со страницы подключения к базе данных.И последнее, но не менее важное: SPRING_DATASOURCE_DRIVER-CLASS-NAME должен быть установлен на org.postgresql.Driver.

Таким образом, вы можете использовать встроенные функции Spring Boot вместо добавления конфигурации, специфичной для среды, в ваше приложение.Однако обратите внимание, что Spring Boot имеет особую порядок чтения внешней конфигурации.Поэтому вы должны убедиться, что их нет.

  • Аргументы командной строки (передаваемые через Прокфайл)
  • Атрибуты JNDI из java:comp/env (не знаю, откуда они могут взяться в Heroku.)
  • Свойства системы Java (также могут быть переданы через Procfile как -D аргументы)

поскольку они будут переопределять переменные среды ОС.

Я хотел бы добавить одну вещь после того, как некоторое время боролся с этим: простого создания объекта конфигурации недостаточно для Heroku, даже с соединителями Spring Cloud.Вам также необходимо явно объявить облачный профиль (-Dspring.profiles.active=cloud) в вашем приложении Procfile.

Кроме DATABASE_URL, который всегда присутствует, Heroku создает 3 переменные среды во время выполнения.Они есть:

JDBC_DATABASE_URL
JDBC_DATABASE_USERNAME
JDBC_DATABASE_PASSWORD

Как вы, возможно, знаете, Spring Boot автоматически настроит вашу базу данных, если обнаружит spring.datasource.* недвижимость в вашем 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=update

Зависимости Hibernate/Postgres

В моем случае я использую Hibernate (входит в комплект поставки). spring-boot-starter-jpa с PostgreSQL, поэтому мне нужны были правильные зависимости в моем build.gradle:

dependencies {
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile('org.postgresql:postgresql:9.4.1212')
}

Если я правильно помню, у меня была та же проблема, и, прочитав документацию Heroku Postgres, я обнаружил, что мне нужно указать два дополнительных свойства подключения для источника данных.

Мне пришлось настроить следующие свойства:

  • SSL=истина
  • sslfactory=org.postgresql.ssl.NonValidatingFactory

Вот пример bean-компонента DataSource:

   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${database.driverClassName}" />
    <property name="url" value="${database.url}" />
    <property name="username" value="${database.username}" />
    <property name="password" value="${database.password}" />
    <property name="connectionProperties" value="ssl=true;sslfactory=org.postgresql.ssl.NonValidatingFactory"/>
</bean>

Вам, конечно, нужно добавить PostgreSql зависимость от библиотеки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top