Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring-boot datasource commit trouble

Tags:

My application uses Spring-Boot 1.4.1.RELEASE and the configuration of my datasource is as follows;

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 

The problem is that the last case of my integration testing if it contains a @Sql setup logic in it, fails to commit the last setup SQL. The trouble happens rarely due to the reordering of the cases, and the fact that there is only a handful cases with setup logic to prepare DB. There is no configuration but the one for the OracleDB, and that is in the 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);     } } 

The trouble, for example in the above case if it were the last integration case, that it fails to commit the last SQL in the @Sql annotations, namely SetupZ.sql, but the data is not completely missing, it inserts the primary key, and sometimes columnA, or columnB, it is as if something is really wrong here.

Would the presence or absence of some configuration cause this? If not what would be the reason?

like image 819
buræquete Avatar asked Mar 03 '17 07:03

buræquete


Video Answer


2 Answers

You can work with @Transactional tests. This allow you to run the test check the result and get BD rolled back to pre-test state.

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

like image 79
Aleh Maksimovich Avatar answered Oct 19 '22 07:10

Aleh Maksimovich


Hi for test classes instead of actual database you can go with In-Memory databases like DB2,derby and h2. it provides the solution for your trouble.

for Code example you can find below URL Spring data jpa repository In-memory test case

like image 23
AdamIJK Avatar answered Oct 19 '22 06:10

AdamIJK