首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Docker和PostgreSQL数据库中同时使用Java?

如何在Docker和PostgreSQL数据库中同时使用Java?
EN

Stack Overflow用户
提问于 2020-11-09 21:06:51
回答 2查看 546关注 0票数 0

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

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

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

我查看了StackOverflow、教程和Heroku,但是到目前为止,还没有任何进展。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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配置,例如:

代码语言:javascript
运行
复制
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映像…

票数 1
EN

Stack Overflow用户

发布于 2021-09-15 11:57:55

为了扩展@ErikMD的答案,我必须补充说,在Java应用程序中,可以为不同的数据库提供许多插件来建立连接,并且没有必要在内部运行带有DB的Docker,而是依赖插件供应商。

我试过MySQL,PostgreSQL,但在DB上没有遇到任何麻烦。如果您移动插件解决方案,检查他们的定价模型和限制,以避免陷入帐单麻烦。此外,一些插件还提供了较旧的数据库,您可能需要花费更多的精力来解决正确的库版本。

指南:

  • 选择DB插件
  • 运行heroku config -a <app_name>以获取db凭据
  • 将它们放入application.propertiesapplication.yml
  • 瞧,你连接到DB了
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64759269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档