需求
我们都知道,在使用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地址,端口号,用户名和密码这几个参数:
- 在这里定义死合适吗?
- 如果需要根据实际环境变化怎么办?
所以,有没有一种方法,可以在上面的配置文件里定义变量或默认值,然后根据实际环境获取变量的值取覆盖呢?
答案是有的。从查阅的资料看,我了解到有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