Каждый вызов задания в Spring Batch открывает новый пул соединений с базой данных?

Я запрашиваю строки из базы данных, используя шаблон JDBC, и для каждой строки я программно запускаю задание, которое выполняет шаг на основе фрагментов. Я беспокоюсь, что каждый вызов задания создаст новый набор пулов соединений. Создает ли он новый набор пулов соединений или просто подключается к текущему пулу?

Основной метод (запускает задание для каждого магазина):

public static void main(String[] args) throws JobExecutionAlreadyRunningException, JobRestartException,
    JobInstanceAlreadyCompleteException, JobParametersInvalidException {

SpringApplication app = new SpringApplication(MainApp.class);
ConfigurableApplicationContext ctx = app.run(args);

JobLauncher jobLauncher = ctx.getBean(JobLauncher.class);
Job job = ctx.getBean("customerJob", Job.class);

storeRepository = ctx.getBean(StoreRepository.class);
customerRepository = ctx.getBean(CustomerRepository.class);

List<Store> stores = storeRepository.findAll(); 


for (Store store: stores) {
    int customerCount = customerRepository.countCustomer(store.getStoreID(), reportDate);
    System.out.println("Count: "+ customerCount);
    if (customerCount != 0) {
    JobParameters jobParameters = new JobParametersBuilder()
        .addString("reportDate", reportDate)
        .addString("ID", store.getStoreID())
        .toJobParameters();
    JobExecution jobExecution = jobLauncher.run(job, jobParameters);
    BatchStatus batchStatus = jobExecution.getStatus();
    System.out.println("Batch Status " + batchStatus);
    }
    

}
}

Конфигурация пакетного задания:

@Bean
public Step generateReport() throws Exception {
return this.stepBuilderFactory
    .get("generateReport")
    .<Customer, Customer>chunk(10)
    .reader(itemReader(null, null))
    .writer(itemWriter())
    .build();
}

@Bean
public Job customerReportJob() throws Exception {
return this.jobBuilderFactory
    .get("customerReportJob")
    .start(generateReport())
    .build();
}

Репозиторий:

@Repository
public class CustomerRepositoryImpl implements CustomerRepository {

private final JdbcTemplate jdbcTemplate;

@Autowired
    public CustomerRepositoryImpl(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
}

@Override
public List<Customer> findByIDAndReportDate(String ID, String reportDate) {
String sqlQuery = "SELECT * " +  
    "FROM CUSTOMER_REPORT " +
    "WHERE ID = " +  ID + "  " +
    "AND TO_CHAR(REPORT_DATE, 'MM/DD/YYYY') = '" + reportDate + "'";

return jdbcTemplate.query(sqlQuery, 
    (rs, rowNum) -> 
    new Customer(mapper(rs)));
}
}

приложение.свойства:

# Oracle settings
spring.datasource.url=##
spring.datasource.username=##
spring.datasource.password=##
spring.datasource.driver-class-name=##

# Hikari
spring.datasource.hikari.maximum-pool-size=5
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.idleTimeout=30000

logging.level.com.zaxxer.hikari=debug

# Spring Batch
spring.batch.job.enabled=false

person Jiji    schedule 25.09.2020    source источник
comment
Нет, Лестер, это не так. Если у вас есть один компонент Datasource с областью действия по умолчанию (Singleton), он не создает новый пул соединений для каждого фрагмента.   -  person Faraz    schedule 25.09.2020
comment
Привет @Faraz, как насчет вызова на работу? Закрываются ли соединения автоматически после каждого задания? Будет ли шанс иметь утечку соединения?   -  person Jiji    schedule 25.09.2020
comment
Это зависит от области действия компонента. Разделяется ли пул соединений между заданиями? Пожалуйста, поделитесь своим кодом, чтобы помочь вам эффективно.   -  person Mahmoud Ben Hassine    schedule 25.09.2020
comment
Если вы не делаете странных вещей, я ожидаю, что у вас есть один источник данных, поэтому он не будет постоянно создавать новый пул соединений. Однако, не видя фактического кода и конфигурации, мы не можем быть в этом уверены.   -  person Mark Rotteveel    schedule 25.09.2020
comment
Привет @MahmoudBenHassine, я добавил код. Спасибо.   -  person Jiji    schedule 27.09.2020
comment
Привет @MarkRotteveel, я добавил код. Спасибо.   -  person Jiji    schedule 27.09.2020


Ответы (1)


В соответствии с вашей конфигурацией ваши задания будут использовать один и тот же источник данных/пул соединений. Вы должны быть в состоянии подтвердить это, просмотрев журналы.

person Mahmoud Ben Hassine    schedule 28.09.2020