【问题标题】:DataSource connections not getting released数据源连接未释放
【发布时间】:2015-03-26 16:56:42
【问题描述】:

我正在使用 DataSource 和 DataSourceTransactionManager spring bean 并将它们连接到 JobRepository bean。一旦我的spring应用程序关闭,其中之一不应该是生命周期感知或具有关闭连接的关闭功能。除非我在退出之前手动调用 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();
}

【问题讨论】:

    标签: spring datasource spring-batch apache-commons-dbcp transactionmanager


    【解决方案1】:

    根据 DriverManagerDataSource (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/DriverManagerDataSource.html) 的 javadoc,每次您从该类建立连接时,该类都会盲目地创建一个新连接。从那里,没有额外的连接管理,因此由您来管理它们。如果您想让其他人管理连接,则需要使用适当的连接池。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-06
      • 2015-10-04
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      相关资源
      最近更新 更多