0%

在Eclipse JPA的persistence.xml中设置环境变量

需求

我们都知道,在使用EclipseLink JPA操作数据库时,不可或缺的要配置persistence.xml文件,一个最基本的配置示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="JPAExamples">
<class>com.lyyao.jpa.test.Employee</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://192.168.0.1:3306/employee"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="123456"/>
</properties>
</persistence-unit>
</persistence>

那么问题来了,对于数据库的IP地址,端口号,用户名和密码这几个参数:

  1. 在这里定义死合适吗?
  2. 如果需要根据实际环境变化怎么办?

所以,有没有一种方法,可以在上面的配置文件里定义变量或默认值,然后根据实际环境获取变量的值取覆盖呢?

答案是有的。从查阅的资料看,我了解到有2种方法可以解决上面的问题。

解决方法

方法一:默认值覆盖法

通过Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME,properties)方法注入properties参数,该

方法二:变量替换法

参考

https://dzone.com/articles/jpa-with-eclipselink-amp-mysql-using-java-configur

https://gist.github.com/baumato/3283f255b00094411110fc889be58aa5