java - 如何在 Docker 和 PostgreSQL 数据库中同时使用 Java?
问题描述
我正在开发 Heroku 玩具应用程序,并希望使用 PostgreSQL 数据库来存储配置。我要么看到关于如何在 Docker 上使用 Java + PostgreSQL 或 Java 的教程。
我找不到如何在 Docker + PostgreSQL 中使用 Java 的方法。
注意:数据库是一个相当不重要的部分。它可以是任何可以持久化信息的东西,例如 Redis、其他数据库。
我查看了 StackOverflow、教程和 Heroku 文档,但到目前为止,还没有运气。
如何在 Heroku 上的 Docker 中从 Java 连接到 PostgreSQL?
解决方案
如何在 Heroku 上的 Docker 中从 Java 连接到 PostgreSQL?
相关文档可在以下 URL 中找到:
https://devcenter.heroku.com/articles/connecting-heroku-postgres#connecting-in-java
总而言之,Heroku 提供了对 PostgreSQL 的原生支持(独立于 Docker),您的 Java 应用程序可以通过专用环境变量(DATABASE_URL
或JDBC_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>
推荐阅读
- python-3.x - 尝试在 Anaconda 上安装 pygame 时,Python 3.x 被降级为 Python 2.7
- c++ - 如何超链接到 QAbstractItemModel 中的项目?
- kubernetes - Openshift 一个应用程序的多个路由器
- python - 使用运行 Ubuntu 服务器但来自 Windows 平台的 Docker 映像录制语音时出错
- c# - 如何使用两个 dateTimePickers 填充列中的日期范围?
- reactjs - 防止表单在 ReactJs 中重置输入状态
- php - 雄辩的 updateOrCreate 总是创建
- jakarta-ee - 如何通过类名以编程方式注入 CDI bean
- java - 如何使用 javaCC 重复 0 或 1 个令牌
- node.js - 防止knex数据库连接池空闲时关闭