Sur*_*non 8 java hibernate jpa jta
我正在编写一个使用hibernate的javaEE应用程序.该应用程序将在多个环境(dev,qa,prod等)上运行,并且将具有与它们中的每一个相关联的单独的dbs.我想为每个环境分别设置jdbc-url,username,password等hibernate属性.
我目前persistence.xml看起来像:
<persistence-unit name="PU" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<validation-mode>CALLBACK</validation-mode>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
<property name="hibernate.event.merge.entity_copy_observer" value="allow"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@host/schema"/>
<property name="hibernate.connection.username" value="abc"/>
<property name="hibernate.connection.password" value="***"/>
</properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
我在我的java代码中使用持久性单元如下:
@PersistenceContext(unitName = "PU")
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)
有没有办法可以将存储在不同属性文件中的hibernate属性注入到不同环境的EntityManager中?
请注意我使用的是JTA,因此无法使用EntityManagerFactory.我也不是也不想用春天.
BAAAAAAD的想法是在您的应用程序WAR/EAR包中包含特定于环境的信息(通过包含多个配置,或者为不同的环境创建不同的包).例如,应在容器中维护不同的数据库.
在你的情况下,你persistence.xml应该看起来像:
<persistence>
<persistence-unit name="PU">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/fooAppDs</jta-data-source>
<properties>
... ...
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
当然你应该有相应的资源参考jdbc/fooAppDs.
通过这样做,您可以在任何环境中部署应用程序.您只需在容器中创建正确的数据源并将其分配给jdbc/fooAppDs.
我相信另一种方法,虽然我不推荐,但是通过hibernate.cfg.xml在classpath中创建.您可能希望拥有本地文件系统位置并将其添加到类路径中,而不是将文件放在JAR/WAR/EAR中.
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |