有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是不同的持久性。测试运行/JPA装置的xml属性

我开发了一些JavaEE/SpringWeb应用程序。我使用JPA2.0-Hibernate。对于集成测试,我需要使用不同的数据库。这些测试需要Jetty来运行应用程序,但我成功地覆盖了web。对于这样的运行,我可以在那里修改我的Spring上下文文件,没关系。 但每次我都需要一个干净的数据库(并向其中加载一些数据)。 由于我的数据库名称和地址是在sprig上下文中配置的,所以我只是如上所述切换了它们——但是我如何更改一些持久性呢。此测试的xml属性是否仅用于删除和重新创建数据库? 我试图再坚持一次。xml位于/src/test/resources/META-INF中(并检查测试类是否位于类路径的第一位),但它没有加载,只使用了“主”版本(来自/src/main/resources/META-INF)。有什么帮助吗


共 (2) 个答案

  1. # 1 楼答案

    使用spring,您通常将数据源定义为Springbean。数据库url和凭据通常包含在外部文件中,例如应用程序。财产

    如果你换一个新的应用。在src/test/resources中的属性将起作用See also here

  2. # 2 楼答案

    你可以定义组织。springframework。奥姆。jpa。坚持小组。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>
    

    然后,将其链接到您的EntityManager工厂:

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        ...
        ...
        <property name="persistenceUnitManager" ref="pum"/>
    </bean>
    

    我用它来实现我自己的坚持。xml链接到内存数据库中的HSQL,并预装了DBUnit(使用hibernate.hbm2ddl.auto=create drop)

    它工作得很好