2016-08-31 29 views
2

データベースに接続するアプリケーションのテストを作成しようとしています。 DataSourceは、Conectionプール(Hikari)です。ここで春の起動と接続プールによるデータベーステスト

は私のテスト構成である:ここで

@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); 
    } 
} 

は私のテストクラスである:私は最初の2回のテストであるテストクラスを実行すると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()); 
    } 
} 

をお知らせプールに接続がなくなる(接続タイムアウト)ため、残りのテストは失敗します。

@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およびPlatform Transaction Manager)を介して自動的にスプリング接続によって提供されるリポジトリ。 – miensol