Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导数据源提交问题_Java_Spring Boot_Datasource - Fatal编程技术网

Java Spring引导数据源提交问题

Java Spring引导数据源提交问题,java,spring-boot,datasource,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 ma

我的应用程序使用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);
    }
}
@SpringBootTest(classes=ConfigClass.class)
公共类EtcTest{
@之后
公共无效拆卸(){
//蒂尔德旺X、Y和Z
}
@试验
@Sql(“setupX.Sql”)
@Sql(“setupY.Sql”)
@Sql(“setupZ.Sql”)
public void get_fromDb(){
List List=buildExpectedList();
Obj expected=buildExpected();
Obj actual=getCallToAPI();
assertThat(rs.getX()).isEqualTo(expected.getX());
断言(rs.getY()).isEqualTo(expected.getY());
资产(rs.getZ()).containsAll(列表);
}
}
问题,例如在上述情况下,如果它是最后一个集成案例, 它无法提交
@SQL
注释中的最后一个SQL,即
SetupZ.SQL
,但是数据并没有完全丢失,它插入了主键,有时插入了
columnA
,或者
columnB
,这就好像这里确实出了问题


是否存在或不存在某些配置会导致这种情况?如果不是,原因是什么?

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

例如,您可以在下面的URL中找到代码示例
您可以尝试使用JPA进行持久化。将提供以下设置:

spring.jpa.show-sql=true

然后你就能看到哪里出了问题

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


参考

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

如果您使用的是自动配置,则应在升级时阅读,尤其是。所有连接池特定的设置都已移动到专用命名空间。查看您的配置。@StephaneNicoll我一直在使用相同的版本,唯一的变化是我添加了一些安装和拆卸方法,这些方法使用junit的前后注释进行注释。我上一次成功构建时,不知怎的,构建在最后进行了一次与db无关的测试,现在,我再次遇到与上一个案例相同的未提交问题。对于Oracle 9i以后的版本,您应该使用
Oracle.jdbc.OracleDriver
,而不是
Oracle.jdbc.driver.OracleDriver
,因为Oracle已经声明
Oracle.jdbc.driver.OracleDriver
不推荐使用。您使用java 8吗?您是否尝试过进行测试
@Transactional
??如果可能的话,在
@Before
方法中引入相同的
@SQL
注释。