Соединения DataSource не освобождаются

Я использую Spring-компоненты DataSource и DataSourceTransactionManager и связываю их с компонентом JobRepository. Разве один из них не должен быть осведомлен о жизненном цикле или иметь функцию закрытия, чтобы закрыть соединение после закрытия моего весеннего приложения. Мой процесс зависает, если я вручную не вызову DataSourceUtils.releaseConnection(...) перед выходом. Я что-то упустил здесь? Есть ли какая-то другая ошибка в моем коде, которая может вызвать это?

Нужно ли использовать пул соединений? Как заставить Spring правильно управлять жизненным циклом соединения.

@Bean
public DataSource dataSource(@Value("${batch_db.url}") String dataSourceUrl, AWSCredentials awsCredentials) {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl(dataSourceUrl);
    dataSource.setUsername(awsCredentials.getAWSAccessKeyId());
    dataSource.setPassword(awsCredentials.getAWSSecretKey());
    return dataSource;
}

@Bean
@DependsOn(value = "dataSource")
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
    DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
    transactionManager.setDataSource(dataSource);
    return transactionManager;
}

@Bean
@DependsOn(value = "dataSource")
public JobRepository jobRepository(DataSource dataSource, PlatformTransactionManager transactionManager) throws Exception {
    JobRepositoryFactoryBean jobRepository = new JobRepositoryFactoryBean();
    jobRepository.setDataSource(dataSource);
    jobRepository.setTransactionManager(transactionManager);
    return jobRepository.getJobRepository();
}

person Gaurav Jain    schedule 27.01.2015    source источник


Ответы (1)


Согласно javadoc для DriverManagerDataSource (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/DriverManagerDataSource.html), этот класс слепо создает новое соединение каждый раз, когда вы подключаетесь к нему. . Оттуда нет никакого дополнительного управления соединениями, так что вы должны управлять ими. Если вы хотите, чтобы кто-то еще управлял соединениями, вам нужно использовать правильный пул соединений.

person Michael Minella    schedule 27.01.2015