如何在 Docker 和 PostgreSQL 数据库中同时使用 Java?
How to use both Java in Docker and PostgreSQL database?
我正在开发 Heroku 玩具应用程序,想使用 PostgreSQL 数据库来存储配置。我要么在 Docker.
上看到有关如何使用 Java + PostgreSQL 或 Java 的教程
我找不到在 Docker + PostgreSQL 中使用 Java 的方法。
注意:数据库是一个相当不重要的部分。它可以是任何可以持久化信息的东西,比如 Redis,其他数据库。
我查看了 Whosebug、教程和 Heroku 文档,但到目前为止,运气不好。
如何在 Heroku 上从 Docker 中的 Java 连接到 PostgreSQL?
How can I connect to PostgreSQL from Java in Docker on Heroku?
相关文档可以在下面找到URL:
https://devcenter.heroku.com/articles/connecting-heroku-postgres#connecting-in-java
综上所述,Heroku 提供了对 PostgreSQL 的原生支持(独立于 Docker),您的 Java 应用程序可以通过专用环境变量 DATABASE_URL
连接到数据库(或 JDBC_DATABASE_URL
),在您的情况下应作为 Docker 容器环境变量导出,通过 via Heroku's Docker container registry.[=20= 部署您的应用程序]
这符合 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
服务只是一个 dev/test 实例……鉴于 Heroku 中唯一打算成为 pushed/released 的图像是 app
图像……
为了扩展@ErikMD 的答案,我必须补充一点,在 Java 应用程序中有许多适用于不同数据库的插件可用于建立连接,并且不需要 运行 Docker 内置数据库,而是依赖插件供应商。
我尝试了 MySQL、PostgreSQL,但从未遇到过任何数据库问题。如果您使用插件解决方案,请检查其定价模型和限制以避免陷入计费麻烦。此外,一些插件提供了较旧的数据库,您可能需要付出更多努力来解决正确的库版本。
指南:
- 选择数据库插件
- 运行
heroku config -a <app_name>
获取数据库凭据
- 将它们放入
application.properties
或 application.yml
- 瞧,你连接到了数据库
我正在开发 Heroku 玩具应用程序,想使用 PostgreSQL 数据库来存储配置。我要么在 Docker.
上看到有关如何使用 Java + PostgreSQL 或 Java 的教程我找不到在 Docker + PostgreSQL 中使用 Java 的方法。
注意:数据库是一个相当不重要的部分。它可以是任何可以持久化信息的东西,比如 Redis,其他数据库。
我查看了 Whosebug、教程和 Heroku 文档,但到目前为止,运气不好。
如何在 Heroku 上从 Docker 中的 Java 连接到 PostgreSQL?
How can I connect to PostgreSQL from Java in Docker on Heroku?
相关文档可以在下面找到URL:
https://devcenter.heroku.com/articles/connecting-heroku-postgres#connecting-in-java
综上所述,Heroku 提供了对 PostgreSQL 的原生支持(独立于 Docker),您的 Java 应用程序可以通过专用环境变量 DATABASE_URL
连接到数据库(或 JDBC_DATABASE_URL
),在您的情况下应作为 Docker 容器环境变量导出,通过 via Heroku's Docker container registry.[=20= 部署您的应用程序]
这符合 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
服务只是一个 dev/test 实例……鉴于 Heroku 中唯一打算成为 pushed/released 的图像是 app
图像……
为了扩展@ErikMD 的答案,我必须补充一点,在 Java 应用程序中有许多适用于不同数据库的插件可用于建立连接,并且不需要 运行 Docker 内置数据库,而是依赖插件供应商。
我尝试了 MySQL、PostgreSQL,但从未遇到过任何数据库问题。如果您使用插件解决方案,请检查其定价模型和限制以避免陷入计费麻烦。此外,一些插件提供了较旧的数据库,您可能需要付出更多努力来解决正确的库版本。
指南:
- 选择数据库插件
- 运行
heroku config -a <app_name>
获取数据库凭据 - 将它们放入
application.properties
或application.yml
- 瞧,你连接到了数据库