Spring TestContextフレームワークに複数のデータソースを使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3968629

質問

Spring TestContextフレームワークとアプリケーションを統合しようとしています。私はこれを拡張してやった AbstractTransactionalJUnit4SpringContextTests, 、 いつものように。ただし、私のアプリケーションには3つの異なるデータソース(Xdatasource、Ydatasource、Zdatasourceなどの名前があります)、テストを実行しようとすると、データソースの自動操作があります。 AbstractTransactionalJUnit4SpringContextTests Autowire-byタイプのデータソースを探しているが、3つを見つけるため、動作しません。そのため、どちらを選択するかはわかりません。

Spring TestContextフレームワークを取得して3つのデータソースを使用する方法はありますか?もしそうなら;どうやって?

役に立ちましたか?

解決

わかりました、私はそれを理解しました。この質問に対する答えは2つあります。まず、拡張 AbstractTransactionalJUnit4SpringContextTests うまくいきません。これは、を作成するための単一のデータソースが必要だからです SimpleJdbcTemplate テストで簡単なJDBCクエリを使用したものを検証するため。このテストではこの機能を使用していないので、交換できます extends AbstractTransactionalJUnit4SpringContextTests 崩壊する構成で:

@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
    DependencyInjectionTestExecutionListener.class,
    DirtiesContextTestExecutionListener.class,
    TransactionalTestExecutionListener.class
})
@Transactional
public class IntegrationTest {
  ...
}

これらの注釈の組み合わせは、拡張と同じセットアップを与えます AbstractTransactionalJUnit4SpringContextTests.

2番目の部分は、3つのデータソースがあるため、3つすべてが必要なので、同じもので参照されることを理解していたことでした。 PlatformTransactionManager. 。トランザクションを配布しました。これはで不可能です DataSourceTransactionManager, 、だから私はaを使用する必要がありました JtaTransactionManager.

他のヒント

AbstractTransactionalJUnit4SpringContextTests クラスは、注入されたものを提供する便利さを可能にするためにのみ、単一のデータソースに自動化されています JdbcTemplate 物体。オーバーライドできます setDataSource(DataSource dataSource) からの方法 AbstractTransactionalJUnit4SpringContextTests テストサブクラスで、次のように使用するデータソースを指定します。

@Resource(name = "dataSource")
public void setDataSource(DataSource dataSource) { 
  this.jdbcTemplate = new JdbcTemplate(dataSource); 
} 

1つのデータソーススプリングの名前を使用する必要があります。 jdbcTemplate 便利な方法。拡張する場合 AbstractTransactionalJUnit4SpringContextTests 上記の他の方法よりも便利であるため、データソースのいずれかを選択するだけで、機能させることができます。

春のジラチケットでこれらの詳細を見つけました #SPR-4634.

データソースのいずれかを次のように定義できます primary="true" XMLでは、選択されます。

すべての3つが必要な場合は、自動化に頼ることはできません - 使用 ReflectionTestUtils テストで手動で設定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top