Java Spring引导数据源提交问题
我的应用程序使用Spring Boot 1.4.1.RELEASE,我的数据源配置如下: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:
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
注释。