#java #postgresql #docker #heroku #heroku-postgres
#java #postgresql #docker #heroku #heroku-postgres
Вопрос:
Я разрабатываю игрушечное приложение Heroku и хочу использовать базу данных PostgreSQL для хранения конфигураций. Я либо вижу учебные пособия по использованию Java PostgreSQL, либо Java в Docker.
Я не могу найти способ, как я могу использовать Java в Docker PostgreSQL.
ПРИМЕЧАНИЕ: База данных — довольно незначительная часть. Это может быть что угодно, что может сохранять информацию, такую как Redis, другие базы данных.
Я просмотрел StackOverflow, учебные пособия и документ Heroku, но пока безуспешно.
Как я могу подключиться к PostgreSQL из Java в Docker на Heroku?
Ответ №1:
Как я могу подключиться к PostgreSQL из Java в Docker на Heroku?
Соответствующую документацию можно найти по следующему URL:
https://devcenter.heroku.com/articles/connecting-heroku-postgres#connecting-in-java
Подводя итог, Heroku предоставляет встроенную поддержку PostgreSQL (независимо от Docker), и ваше Java-приложение может подключаться к базе данных с помощью выделенной переменной среды DATABASE_URL
(or JDBC_DATABASE_URL
), которая в вашем случае должна быть экспортирована как переменная среды контейнера Docker, при развертывании вашего приложения через реестр контейнеров Docker в Heroku.
Это соответствует рекомендациям Docker в отношении доступа к внешним базам данных, а именно: база данных PostgreSQL не является частью контейнера приложения, но контейнер приложения взаимодействует с базой данных через HTTP-запросы.
Дополнительные сведения
Кроме того, если вы заинтересованы в CI / CD или в полном локальном тестировании вашего приложения с полной конфигурацией разработчика, включающей копию (или заглушку) вашей базы данных PostgreSQL, позвольте мне отметить, что вам может быть интересно разработать docker-compose.yml
конфигурацию, например, следующую:
version: '3'
services:
db:
image: 'postgres:13'
# cf. https://devcenter.heroku.com/articles/heroku-postgresql#version-support
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: TestPhasePassword
POSTGRES_DB: mydb
# The following is UNNEEDED for the app service to access the db.
# Enable it ONLY IF YOU NEED TO ALSO ACCESS THE DB FROM THE HOST.
# ports:
# - '5432:5432'
networks:
- db-net
# The volume is useful to locally test the webapp data persistence,
# after running "docker-compose down amp;amp; docker-compose up --build".
volumes:
- postgres-data-dev:/var/lib/postgresql/data
app:
build: .
# image: name-of-your-app # optional
environment:
DATABASE_URL: 'postgres://postgres:TestPhasePassword@db:5432/mydb'
ports:
- '8080:8080'
networks:
- db-net
depends_on:
- db
networks:
db-net:
driver: bridge
volumes:
postgres-data-dev:
driver: local
и просто запустите docker-compose up
.
Итак, здесь db
сервис — это всего лишь экземпляр dev / test … учитывая, что единственным изображением, предназначенным для отправки / выпуска в Heroku, является app
изображение…
Ответ №2:
Чтобы расширить ответ @ErikMD, я должен добавить, что для установления соединения в приложении Java доступно множество плагинов для разных баз данных, и нет необходимости запускать Docker с DB внутри, а скорее полагаться на поставщиков плагинов.
Я пробовал MySQL, PostgreSQL и никогда не сталкивался с проблемами с DB. Если вы переходите на решения с плагинами, проверьте их модель ценообразования и ограничения, чтобы избежать проблем с выставлением счетов. Кроме того, некоторые плагины предоставляют старые базы данных, и вам, возможно, придется приложить больше усилий для решения правильных версий библиотеки.
РУКОВОДСТВО:
- выберите плагин DB
- запустите
heroku config -a <app_name>
, чтобы получить учетные данные БД - поместите их в
application.properties
илиapplication.yml
- вуаля, вы подключились к БД