首页 > 解决方案 > 如何在 Docker 和 PostgreSQL 数据库中同时使用 Java?

问题描述

我正在开发 Heroku 玩具应用程序,并希望使用 PostgreSQL 数据库来存储配置。我要么看到关于如何在 Docker 上使用 Java + PostgreSQL 或 Java 的教程。

我找不到如何在 Docker + PostgreSQL 中使用 Java 的方法。

注意:数据库是一个相当不重要的部分。它可以是任何可以持久化信息的东西,例如 Redis、其他数据库。

我查看了 StackOverflow、教程和 Heroku 文档,但到目前为止,还没有运气。

如何在 Heroku 上的 Docker 中从 Java 连接到 PostgreSQL?

标签: javapostgresqldockerherokuheroku-postgres

解决方案


如何在 Heroku 上的 Docker 中从 Java 连接到 PostgreSQL?

相关文档可在以下 URL 中找到:

https://devcenter.heroku.com/articles/connecting-heroku-postgres#connecting-in-java

总而言之,Heroku 提供了对 PostgreSQL 的原生支持(独立于 Docker),您的 Java 应用程序可以通过专用环境变量(DATABASE_URLJDBC_DATABASE_URL您的应用程序通过 Heroku 的 Docker 容器注册表

这符合 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 && 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服务只是一个开发/测试实例……鉴于唯一打算在 Heroku 中推送/发布的图像是app图像……</p>


推荐阅读