我有一个独立的java应用程序,它使用JPA来实现其持久性。 现在我在META-INF中有一个persistence.xml。我的应用程序目前正在开发中。 我的问题是,如果我从发展转向下一个环境,那就说质量保证。我必须修改persistence.xml并重建jar。这是正确的方法吗? 如果没有,如果我将连接属性移动到另一个文件,该文件应放在何处?
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
<persistence-unit name="pu1" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>ClassA</class>
<class>ClassB</class>
<class>ClassC</class>
<class>ClassD</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />
<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.connection.username" value="username" />
<property name="hibernate.connection.password" value="password" />
<property name="hibernate.connection.url"
value="url" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.archive.autodetection" value="class" />
</properties>
</persistence-unit>
</persistence>
提前致谢!
答案 0 :(得分:4)
这是一个很好的问题。通常,您将所有这些环境设置放在外部文件中,例如application.properties,并在启动应用程序时将位置传递给JVM(例如-Dconfig.location=/conf/
)
然后你应该找到一种方法将外化属性放入EntityManagerFactory
。你不能在persistence.xml中做到这一点,你只能在那里进行硬编码。但是,您可以通过传递供应商属性来创建实体管理器工厂。
例如,如果使用像spring这样的框架,这更容易实现,因为spring为实体管理器提供了工厂bean。否则你应该自己处理。这是春天的相关部分:
provider.createEntityManagerFactory(persistenceUnitInfo, getJpaPropertyMap())