Spring-boot数据源提交问题

时间:2017-03-03 07:51:12

标签: java spring-boot datasource

我的应用程序使用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或{{1 ,就好像这里真的出了问题。

某些配置的存在与否会导致这种情况吗?如果不是这样的原因?

4 个答案:

答案 0 :(得分:2)

您可以使用@Transactional测试。这允许您运行测试检查结果并使BD回滚到预测试状态。

参考http://docs.spring.io/spring/docs/4.3.11.RELEASE/spring-framework-reference/htmlsingle#testcontext-tx-enabling-transactions

答案 1 :(得分:1)

您好,对于测试类而不是实际数据库,您可以使用内存数据库,如DB2,derby和h2。它为您的麻烦提供了解决方案。

对于Code示例,您可以在下面找到URL Spring data jpa repository In-memory test case

答案 2 :(得分:1)

您可以尝试使用JPA进行持久化。可以使用以下设置:

spring.jpa.show-sql=true

然后你可以看到出了什么问题。

答案 3 :(得分:0)

这是由于JUnit和Spring / Hibernate中的某些库冲突。更新到最新的Spring&Junit版本并更新到Java8之后,问题就消失了。