我正在开发Heroku玩具应用程序,并希望使用PostgreSQL数据库来存储配置。我要么看到关于如何使用Java + PostgreSQL的教程,要么看到在Docker上使用Java的教程。
我找不到如何在Docker + PostgreSQL中使用Java的方法。
注意:数据库是一个相当不重要的部分。它可以是任何可以持久化的信息,如Redis,其他数据库。
我查看了StackOverflow、教程和Heroku,但是到目前为止,还没有任何进展。
如何从Heroku上的Docker中从Java连接PostgreSQL?
发布于 2020-11-09 22:03:54
如何从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
)连接到数据库,在您的情况下,它应该作为Docker容器环境变量导出,通过Heroku码头集装箱登记处部署您的应用程序。
这与Docker关于访问外部数据库的最佳实践是一致的,即PostgreSQL数据库不是app容器的一部分,但是app容器通过HTTP请求与数据库通信。
附加细节
此外,如果您对CI/CD 或感兴趣,希望在本地完全测试您的应用程序,使用包含PostgreSQL数据库副本(或存根)的完整的dev配置,那么请注意,您可能有兴趣设计一个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中唯一要推送/发布的映像是app
映像…
发布于 2021-09-15 11:57:55
为了扩展@ErikMD的答案,我必须补充说,在Java应用程序中,可以为不同的数据库提供许多插件来建立连接,并且没有必要在内部运行带有DB的Docker,而是依赖插件供应商。
我试过MySQL,PostgreSQL,但在DB上没有遇到任何麻烦。如果您移动插件解决方案,检查他们的定价模型和限制,以避免陷入帐单麻烦。此外,一些插件还提供了较旧的数据库,您可能需要花费更多的精力来解决正确的库版本。
指南:
heroku config -a <app_name>
以获取db凭据application.properties
或application.yml
中https://stackoverflow.com/questions/64759269
复制相似问题