我开发了一些Java EE / Spring网络应用程序。我使用JPA 2.0 - Hibernate。对于集成测试,我需要使用不同的数据库。那些测试需要Jetty来运行应用程序,但我设法覆盖web.xml进行这样的运行,在那里我可以修改我的Spring上下文文件,没关系。 但我每次都需要一个干净的数据库(并将一些数据加载到其中)。 由于我的数据库名称和地址是在sprig上下文中配置的,我只是按照上面的描述进行了切换 - 但是如何更改我的一些persistence.xml属性才能使数据库丢弃并重新创建? 我尝试在/ src / test / resources / META-INF中创建另一个persistence.xml(并检查了类路径中的第一个测试类),但是没有加载它,只使用了'master'版本(来自/ src /主/资源/ META-INF)。有什么帮助吗?
答案 0 :(得分:0)
使用spring,您通常将数据源定义为spring bean。数据库URL和凭证通常包含在外部文件中,例如application.properties。
如果您在src/test/resources
中添加了一个新的applicaiton.properties,它将会起作用。 See also here
答案 1 :(得分:0)
您可以定义 org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager :
<bean id="pum" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="persistenceXmlLocations">
<list>
<value>/path/to/my/test-persistence.xml</value>
</list>
</property>
<property name="dataSources">
<map>
<entry key="dataSource" value-ref="dataSource"/>
</map>
</property>
<!-- if no datasource is specified, use this one -->
<property name="defaultDataSource" ref="dataSource"/>
</bean>
然后,将其链接到您的entityManagerFactory:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
...
...
<property name="persistenceUnitManager" ref="pum"/>
</bean>
我使用它来创建我自己的persistence.xml链接到HSQL内存数据库,预先加载DBUnit(使用hibernate.hbm2ddl.auto = create-drop)。
完美无缺。