1

Spring Boot で MongoRepository のテストを作成しましたが、テストは正常に動作します。唯一の問題は、テストが終了したときに、テストによってデータベースが変更されないように、ロールバックが必要なことです。

// package...

// imports...

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MetistrafficApplication.class)
@Rollback(true)
public class AppRepositoryTests {

    @Autowired
    private AppRepository appRepository;

    @Test
    public void insertTest() {
        App app = new App("test");
        App appInserted = appRepository.save(app);

        assertThat(appInserted.getName(), equalTo(app.getName()));
    }
}

@Rollback の前に @Transactional を配置しましたが、次のエラーが発生します。

java.lang.illegalstateexception:Failed to retrieve PlatformTransactionManager for @Transactional test for test context

エラーを検索したところ、MongoRepository のコードは見つかりませんでした。それで、どうすればこれを解決できますか?

編集: を追加した後@Transactional("PlatformTransactionManager")、取得するエラーは次のように変更されます。

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'PlatformTransactionManager' is defined: No matching PlatformTransactionManager bean found for qualifier 'PlatformTransactionManager' - neither qualifier match nor bean name match!
4

3 に答える 3

3

私の知る限り、MongoDB 用の Spring の TransactionManager の実装はありません。これは、ACID の意味でのトランザクションではないためです。いいえ、MongoDB で @Transactional アノテーションを使用することはできません。すべてのクリーンアップを手動で行うか、DBUnit を使用して MongoDB 用の独自の拡張機能を追加する必要があります。

編集: Petterが彼の回答で述べたように、MongoDB 4.0 以降、MongoDB はACID トランザクションをサポートしており、GitHub で公式の SpringData の例を見つけることができ、Spring の開発者ブログで機能のリリース投稿を行うこともできます。

于 2016-07-13T15:35:41.037 に答える