2011-06-27 7 views
0

私はいくつかのJava EE/Spring web-appを開発します。私はJPA 2.0 - Hibernateを使用します。統合テストでは、私は別のデータベースを使用する必要があります。これらのテストではJettyがアプリケーションを実行する必要がありますが、そのような実行のためにweb.xmlをオーバーライドすることができました。そこでSpringのコンテキストファイルを変更できます。 しかし、私は毎回きれいなデータベース(といくつかのデータを読み込む)が必要です。 私のデータベース名とアドレスはsprigコンテキストで設定されているので、上記のように切り替えましたが、このテストのpersistence.xmlの一部を変更してデータベースを削除して再作成するにはどうすればよいですか? /src/test/resources/META-INFに別のpersistence.xmlを作成しようとしましたが(テストクラスがクラスパスの最初にあることがチェックされていますが)ロードされておらず、/ srcの 'master'/main/resources/META-INF)。どんな助け?テスト実行/ JPAのための異なるpersistence.xmlの特権

答えて

0

春には、通常、データソースをスプリングビーンとして定義します。データベースのURLと資格情報は通常、外部ファイル(application.propertiesなど)から構成されます。

src/test/resourcesに新しいapplicaiton.propertiesを追加するとうまくいきます。 See also here

+0

はい私は知っていますが、Spring Contexではなくpersistence.xmlに問題があります - 私は M4ks

+0

aha ..を変更したいと思います。私は春に設定するプロパティを外部化しましたが、それはクラスの1つの拡張を必要とします。 – Bozho

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は、DBUnit(hibernate.hbm2ddl.auto = create-dropを使用)をプリロードしたHSQLインメモリDBにリンクされています。

これは完全に動作します。

関連する問題