0

私は DataSource と DataSourceTransactionManager スプリング Bean を使用し、それらを JobRepository Bean に配線しています。これらのいずれかがライフサイクルに対応していないか、Spring アプリケーションが閉じているときに接続を閉じるためのクローズ機能を持っているべきではありません。終了する前に DataSourceUtils.releaseConnection(...) を手動で呼び出さない限り、プロセスがハングします。ここで何か不足していますか?これを引き起こす可能性のあるコードに他のバグがありますか?

接続プールを使用する必要がありますか? 接続ライフサイクルを正しく管理するにはどうすればよいですか。

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

1 に答える 1