我们可以在属性文件中设置JTA数据源名称,该名称将在应用程序的persistance.xml中读取。
答案 0 :(得分:1)
您可以使用EntityManagerFactory
动态生成Persistence.createEntityManagerFactory(persistenceUnitName, properties)
并使用properties
映射指定数据源名称来覆盖persistence.xml文件中的值。但是,现在您永远不能使用EntityManager
注入@PersistenceContext
,或者在应用程序的任何位置使用EntityManagerFactory
注入@PersistenceUnit
,并且您必须手动管理您的EntityManager事务。不要这样做。这是一个糟糕的主意。
答案 1 :(得分:1)
还有另一种更简单的方法可以配置您的数据源名称和其他应用程序参数。
我们使用maven配置文件和资源过滤。您需要在persistence.xml
中定义与.properties
文件或.pom
中的媒体资源名称相匹配的占位符。
在构建期间,您指定配置文件,maven将使用您的属性替换占位符。
我们已经使用此技术在不同的部署环境之间切换数据源。
编辑:
首先,为资源过滤定义配置文件:
<profiles>
<profile>
<id>set_datasource</id>
<build>
<!-- enable resource filter to set the datasource name --
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
...
为每个数据源创建一个配置文件:
<profile>
<id>db_test</id>
<properties>
<database.name>test_ds</database.name>
</properties>
</profile>
在持久性单元中,准备占位符
<persistence-unit name="my_db">
<jta-data-source>java:jboss/datasources/${datasource.name}</jta-data-source>
</persistence-unit>
使用两个配置文件调用maven:
mvn test -Pdatasource,db_test