【问题标题】:Different persistence.xml properies for test run / JPA Fixtures用于测试运行/JPA Fixtures 的不同 persistence.xml 属性
【发布时间】:2011-06-27 19:58:39
【问题描述】:

我开发了一些 Java EE/Spring 网络应用程序。我使用 JPA 2.0 - 休眠。对于集成测试,我需要使用不同的数据库。这些测试需要 Jetty 来运行应用程序,但我设法覆盖 web.xml 以进行这样的运行,在那里我可以修改我的 Spring 上下文文件,没关系。 但我每次都需要一个干净的数据库(并将一些数据加载到其中)。 由于我的数据库名称和地址是在 sprig 上下文中配置的,因此我只是按照上面的描述切换了它们 - 但是我如何才能更改我的一些 persistence.xml 属性以进行此测试,以便仅删除和重新创建数据库? 我试图在/src/test/resources/META-INF 中创建另一个persistence.xml(并检查测试类是否首先在类路径中)但它没有加载并且只使用“主”版本(来自/src/主要/资源/META-INF)。有什么帮助吗?

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    使用 spring,您通常将数据源定义为 spring bean。数据库 url 和凭据通常包含在外部文件中,例如 application.properties。

    如果您在src/test/resources 中添加新的 applicaiton.properties,它将起作用。 See also here.

    【讨论】:

    • 是的,我知道,但问题在于 persistence.xml 而不是 Spring contex - 我想更改
    • aha.. 好吧,我也有外部化的属性要配置为 spring,但这需要扩展其中一个类。
    【解决方案2】:

    你可以定义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)。

    完美运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2012-05-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      相关资源
      最近更新 更多