如何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")) // ...