从外部文件获取JPA凭据

时间:2017-07-10 14:01:59

标签: java hibernate tomcat

我们公司的应用程序有一个Web服务。这个应用程序有几个客户端,在每个客户端我们有不同的数据库URL,用户名和密码。每次我需要更改项目并使用maven重新生成.war文件时,我需要为每个客户端的每个凭据设置persistence.xml。

有没有办法在tomcat中设置配置文件来设置此配置?

我的坚持就像这样:

<property name="hibernate.connection.username" value="user1" />
    roperty name="hibernate.connection.password" value="pass1" /> 
    <property name="hibernate.connection.url" value="jdbc:mysql://url1" 
/>

然后生成.war,我必须再次更改它:

<property name="hibernate.connection.username" value="user2" />
    roperty name="hibernate.connection.password" value="pass2" /> 
    <property name="hibernate.connection.url" value="jdbc:mysql://url2" 
/>
然后重新产生战争。每个客户一个。

由于某些客户使用外部服务来托管服务,因此无法使用环境变量。

1 个答案:

答案 0 :(得分:0)

我找到了自己的答案:

首先,你需要创建setenv.bat(或者如果在linux上的setenv.sh)并创建你的变量(在Windows上):

set _URL=jdbc:mysql://localhost:3306/db
set _USERNAME=root
set _PASSWORD=root

此文件位于tomcat文件夹/ bin中,与startup.bat和shutdown.bat一起。现在,当您启动此服务器时,此变量将可用。

要在Java中使用此变量,您需要在连接类中进行以下操作,如下所示:

Map<String, String> properties = new HashMap<String, String>();
    properties.put("javax.persistence.jdbc.url", System.getenv("_URL"));
    properties.put("javax.persistence.jdbc.user", System.getenv("_USERNAME"));
    properties.put("javax.persistence.jdbc.password", System.getenv("_PASSWORD"));
    factory = Persistence.createEntityManagerFactory("project", properties);

希望它可以帮助别人。