Как использовать Java как в Docker, так и в базе данных PostgreSQL?

#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
  • вуаля, вы подключились к БД