【发布时间】:2017-07-23 05:49:27
【问题描述】:
我的应用使用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。由于案例的重新排序,并且只有少数案例具有设置逻辑来准备数据库,因此问题很少发生。除了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,就好像什么这里真的错了。
是否存在某些配置会导致这种情况?如果不是,那是什么原因?
【问题讨论】:
-
如果您使用自动配置,您应该在升级时阅读the release note,尤其是this section。所有连接池特定设置都已移至专用命名空间。检查您的配置。
-
@StephaneNicoll 我一直在使用相同的版本,唯一的变化是我添加了一些设置和拆卸方法,这些方法用junit的前后注释进行了注释。上次我成功构建了,当时构建以某种方式在最后放置了一个与数据库无关的测试,现在我再次遇到与最后一个案例相同的非提交问题。
-
对于 Oracle 9i 及更高版本,您应该使用
oracle.jdbc.OracleDriver而不是oracle.jdbc.driver.OracleDriver,因为 Oracle 已经声明oracle.jdbc.driver.OracleDriver已弃用。 -
你使用的是 java 8 吗?
-
您是否尝试过测试
@Transactional??如果可能的话,引入具有相同@SQL注释的@Before方法。
标签: java spring-boot datasource