如何配置Hibernate ORM数据库属性以使用Docker

时间:2016-04-06 11:54:58

标签: hibernate java-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这样做

1 个答案:

答案 0 :(得分:2)

我相信你有以下选择:

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

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

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

我相信你最好的选择是使用programmatic configuration。然后,您所要做的就是在容器内设置正确的环境变量。在您的申请中,这只是一个问题:

Configuration cfg = new Configuration()
    .setProperty("connection.username", System.getenv("DB_USER"))
    // ...