如何configurationHibernate ORM数据库属性以使用Docker

为了连接到数据库,我使用了一个networking套接字,在我的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文件并从dockerdynamic链接到数据库吗?

我想我可以有一个configuration文件(如.env),将包含数据库的凭据,并有Java和docker阅读这一点,但我现在不configurationdocker这样做

我相信你有以下select:

  • <property name="connection.username">${db.user}</property>使用XML中的系统属性
  • 使用mavenconfiguration文件和filter为每个环境select正确的文件来维护不同的hibernate.cfg.xml文件
  • 使用编程configuration和系统属性或环境variables

系统属性的问题在于,要使用它们,您必须将它们设置在您的应用程序服务器中,使用属性文件或通过命令行传递它们,如-Ddb.user=foo 。 要在应用程序服务器中设置它们,您必须使容器使用CLI,REST API或另一个configuration文件(这次是服务器)来设置它。 这将取决于你的.war部署。 通过命令行传递这些属性会导致数据库凭据以纯文本forms存在,以便能够列出该进程的任何人。

维护多个configuration文件或使用属性文件也是一件痛苦的事情,它会增加构build过程的开销,我不认为这是必要的,至less不要设置简单的凭据。

我相信你最好的select是使用编程configuration 。 那么你所要做的就是在容器中设置正确的环境variables。 在你的应用程序中,这只是一个问题:

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