2016-08-31 2 views
2

데이터베이스에 연결하는 응용 프로그램에 대한 테스트를 만들려고합니다. DataSource는 연결 풀 (히카리)입니다. 내가 처음이 개 테스트는 테스트 클래스를 실행하면 maximumPoolSize를이 2로 설정되어 있는지스프링 부트 및 연결 풀을 사용한 데이터베이스 테스트

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = SqlTestConfig.class) 
@Slf4j 
@Sql(
     scripts = "/clearTables.sql", 
     config = @SqlConfig(separator = "GO") 
) 
public class SqlTest { 

    @Autowired 
    DataSource dataSource; 

    @Test 
    public void test1() throws SQLException { 
     log.info("catalog:" + dataSource.getConnection().getCatalog()); 
    } 

    @Test 
    public void test2() throws SQLException { 
     log.info("catalog:" + dataSource.getConnection().getCatalog()); 
    } 

    @Test 
    public void test3() throws SQLException { 
     log.info("catalog:" + dataSource.getConnection().getCatalog()); 
    } 

    @Test 
    public void test4() throws SQLException { 
     log.info("catalog:" + dataSource.getConnection().getCatalog()); 
    } 
} 

공지 사항 : 여기

@Configuration 
public class SqlTestConfig { 

    @Bean 
    DataSource dataSource() { 
     HikariConfig config = new HikariConfig(); 
     config.setMaximumPoolSize(2); 
     config.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     config.setJdbcUrl("jdbc:sqlserver://serversql:1433;database=myDatabase"); 
     config.setUsername("user"); 
     config.setPassword("password"); 
     return new HikariDataSource(config); 
    } 
} 

내 테스트 클래스입니다 : 여기

내 테스트 구성입니다 성공적으로 완료되고 풀에 연결이 끊어지기 때문에 나머지 테스트가 실패합니다 (연결 시간 초과).

@Sql 주석으로 인해 정리 스크립트를 실행하기 위해 DataSourceInitializer -s이 만들어 지지만 연결이 풀로 반환되지 않기 때문에이 문제가 발생한다고 생각합니다.

MaximumPoolSize를 4로 설정하면 모든 테스트가 성공적으로 완료됩니다. 구성 오류가 발생했는지 또는 이것이 Spring의 버그인지 알 수 없습니다.

+0

나는 오류가 발생했다고 완전히 말할 수 있습니다. 문제는 Spring Boot가 아닙니다. @After 메서드를 추가하여 각 테스트 후에 연결을 정리하고 풀로 복원해야합니다. – duffymo

답변

0

getConnection은 기본 풀에서 연결을 가져옵니다. 다음과 같이 획득 한 연결을 제대로 닫으려면 테스트를 변경하십시오.

@Test 
public void test1() throws SQLException { 
    try (Connection connection = dataSource.getConnection()) { 
     log.info("catalog:" + connection.getCatalog()); 
    } 
} 
+0

실제로 문제를 해결하기 때문에이 대답을 수락합니다. 그러나 스프링 데이터 저장소 (http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories)를 사용하여 테스트를 수행합니다. 리포지토리는 기본 연결을 노출하지 않습니다. 어떻게 청소하는 방법에 대한 제안? –

+0

@dilbertelbonia 기본 추상화 (JPA, Hiberante 및 플랫폼 트랜잭션 관리자)를 통해 스프링 연결을 자동으로 제공하는 리포지토리 – miensol

관련 문제