[java] スプリングブートデータソースコミットのトラブル



Answers

こんにちは、実際のデータベースの代わりにテストクラスのためにあなたは、DB2のようなインメモリデータベース、derbyとh2に行くことができます。 それはあなたのトラブルの解決策を提供します。

コード例については、以下のURLを参照してください。SpringデータjpaリポジトリIn-memoryテストケース

Question

私のアプリケーションはSpring-Boot 1.4.1.RELEASEを使い、私のデータソースの設定は以下の通りです。

spring:
  datasource:
    url: ***
    username: ***
    password: ***
    driver-class-name: oracle.jdbc.driver.OracleDriver
    initial-size: 1
    max-active: 100
    max-idle: 30
    min-idle: 1
    max-wait: 0
    pool-prepared-statements: true
    max-open-prepared-statements: 3

問題は、 @Sqlセットアップロジックが含まれている場合の統合テストの最後のケースで、最後のセットアップSQLをコミットできないことです。 この問題は、ケースの並べ替えや、DBを準備するためのセットアップロジックのほんの一例しかないという事実が原因で起きることはめったにありません。 構成はありませんが、OracleDB用の構成であり、 ConfigClassます。

@SpringBootTest(classes = ConfigClass.class)
public class EtcTest {

    @After
    public void teardown() {
        // teardwon X, Y, & Z
    }

    @Test
    @Sql("setupX.sql")
    @Sql("setupY.sql")
    @Sql("setupZ.sql")
    public void get_fromDb() {
        List<Etc> list = buildExpectedList();
        Obj expected = buildExpected();
        Obj actual = getCallToAPI();

        assertThat(rs.getX()).isEqualTo(expected.getX());
        assertThat(rs.getY()).isEqualTo(expected.getY());
        assertThat(rs.getZ()).containsAll(list);
    }
}

たとえば、上記のケースで最後の統合のケースで、最後のSQLを@Sqlアノテーション、つまりSetupZ.sqlにコミットできませんが、データが完全に失われていない場合は、主キーが挿入され、時にはcolumnA 、またはcolumnBは、まるでここで何か本当に間違っているかのようです。

いくつかの構成の有無によってこれが発生しますか? 理由は何でしょうか?




Links