0

DataSource 및 DataSourceTransactionManager 스프링 빈을 사용하여 JobRepository bean에 연결합니다. 이들 중 하나가 수명주기를 인식하지 못하거나 스프링 애플리케이션이 닫히고 나면 연결을 닫는 기능이 없어야합니다. 나가기 전에 수동으로 DataSourceUtils.releaseConnection (...)을 호출하지 않으면 프로세스가 멈추고 있습니다. 내가 여기서 뭔가를 놓치고 있니? 내 코드에이 문제를 일으킬 수있는 다른 버그가 있습니까?DataSource 연결이 해제되지 않습니다.

연결 풀을 사용해야합니까? 연결 수명주기를 올바르게 관리하려면 스프링을 어떻게 만들 수 있습니까?

DriverManagerDataSource ( http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/DriverManagerDataSource.html)에 대한 javadoc의 당
@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(); 
} 

답변

0

는, 그 클래스는 맹목적 때마다 당신은 그것에서 연결 새 연결을 만듭니다. 거기에서 연결을 추가로 관리 할 필요가 없으므로 연결을 관리해야합니다. 다른 사람이 연결을 관리하도록하려면 적절한 연결 풀을 사용하는 것이 좋습니다.

관련 문제