hibernate - 如何配置 Hibernate ORM 数据库属性以与 Docker 一起使用

标签 hibernate jakarta-ee docker docker-compose

为了连接到数据库,我使用了一个网络套接字,它在我的 hibernate.cfg.xml 中指定。作为:

<property name="connection.url">jdbc:postgresql://localhost:PORT/DBNAME</property>

连同用户名、密码:
    <property name="connection.username">user</property>
    <property name="connection.password">pass</property>

我想使用 docker 进行部署。

我的问题是目前我必须更改源代码(例如 hibernate.cfg.xml),并在每次我想重新部署时重新生成一个新的 .war 文件。

有没有办法避免这种情况?我可以使用相同的 .war 文件并从 docker 动态链接到数据库吗?

我想我可以有一个包含 db 凭据的配置文件(类似于 .env),并且让 java 和 docker 都读取这个,但我现在不配置 docker 来这样做

最佳答案

我相信你有以下选择:

  • 在 XML 中使用系统属性,如 <property name="connection.username">${db.user}</property>
  • 维持不同 hibernate.cfg.xml使用 Maven 配置文件和过滤器为每个环境选择正确的文件
  • 使用编程配置和系统属性或环境变量

  • 系统属性的问题在于,要使用它们,您必须在应用服务器中设置它们、使用属性文件或通过命令行传递它们,如 -Ddb.user=foo .要在应用服务器中设置它们,您必须让容器使用 CLI、REST API 或其他配置文件(这次是服务器)来设置它。这将取决于您要部署的内容 .war到。通过命令行传递这些属性存在数据库凭据以纯文本形式存在的问题,供任何可以列出该进程的人使用。

    维护多个配置文件或使用属性文件也很痛苦,它会增加构建过程的开销,我认为这没有必要,至少不需要设置简单的凭据。

    我相信你最好的选择是使用 programmatic configuration .然后你所要做的就是在容器内设置正确的环境变量。在您的应用程序中,这只是一个问题:
    Configuration cfg = new Configuration()
        .setProperty("connection.username", System.getenv("DB_USER"))
        // ...
    

    关于hibernate - 如何配置 Hibernate ORM 数据库属性以与 Docker 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450416/

    相关文章:

    hibernate - 尝试设置 Tomcat 和 JDBC 连接池 : Communications Link Failure

    java - 使用映射实体映射对象

    java - 如何解决JAVA中的JSON格式问题?

    java - Mojarra Java EE 5/6 兼容性

    python - 如何修复执行器运行失败 [/bin/sh -c pip install --upgrade --force-reinstall pip==9.0.3 && pip install --upgrade 'setuptools<45'] :

    java - 如何设置hibernate使用Glassfish连接池?

    java - 使用 Java EE 检索大型对象列表

    java - 使用通用 URL 模式保护 REST 资源

    mysql - 使用 MySQL 启动 docker 容器时 init sql 语法错误

    docker - 在Docker的Rstudio上安装png软件包,但失败