批处理作业完成后,spring批处理程序不会正常结束

问题描述 投票:1回答:1

我有一个简单的弹簧片,它从DB读取数据并写入eventhub.I使用HikariCP连接到DB。作业完成后,我的批次不会优雅地结束。不知何故,HikariCP自行重新初始化。

11:32:55.151 [main] DEBUG o.s.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource
11:32:55.193 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Creating new transaction with name [org.springframework.batch.core.repository.support.SimpleJobRepository.update]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
11:32:55.194 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Acquired Connection [HikariProxyConnection@1438178266 wrapping ConnectionID:1 ClientConnectionId: ef2e5d07-0aed-417e-a571-2c9fec2fdf34] for JDBC transaction
11:32:55.194 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Switching JDBC Connection [HikariProxyConnection@1438178266 wrapping ConnectionID:1 ClientConnectionId: ef2e5d07-0aed-417e-a571-2c9fec2fdf34] to manual commit
11:32:55.236 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL query
11:32:55.236 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL statement [SELECT VERSION FROM dse.BATCH_JOB_EXECUTION WHERE JOB_EXECUTION_ID=?]
11:32:55.275 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL query
11:32:55.275 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL statement [SELECT COUNT(*) FROM dse.BATCH_JOB_EXECUTION WHERE JOB_EXECUTION_ID = ?]
11:32:55.303 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL update
11:32:55.303 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL statement [UPDATE dse.BATCH_JOB_EXECUTION set START_TIME = ?, END_TIME = ?,  STATUS = ?, EXIT_CODE = ?, EXIT_MESSAGE = ?, VERSION = ?, CREATE_TIME = ?, LAST_UPDATED = ? where JOB_EXECUTION_ID = ? and VERSION = ?]
11:32:55.339 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Initiating transaction commit
11:32:55.339 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Committing JDBC transaction on Connection [HikariProxyConnection@1438178266 wrapping ConnectionID:1 ClientConnectionId: ef2e5d07-0aed-417e-a571-2c9fec2fdf34]
11:32:55.446 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Releasing JDBC Connection [HikariProxyConnection@1438178266 wrapping ConnectionID:1 ClientConnectionId: ef2e5d07-0aed-417e-a571-2c9fec2fdf34] after transaction
11:32:55.447 [main] INFO  o.s.b.c.l.support.SimpleJobLauncher - Job: [FlowJob: [name=migrateEmailJob]] completed with the following parameters: [{run.id=34}] and the following status: [COMPLETED]
11:33:19.316 [HikariPool-1 housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)
11:33:49.319 [HikariPool-1 housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)
11:34:19.323 [HikariPool-1 housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.1.3.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependency>
   <groupId>com.zaxxer</groupId>
   <artifactId>HikariCP</artifactId>
   <version>3.3.1</version>
</dependency>
spring-batch hikaricp
1个回答
1
投票

做了一个解决方法如下。

    public class JobCompletionNotificationListener extends JobExecutionListenerSupport {

     @Override
        public void afterJob(JobExecution jobExecution) {
            if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
                   new Thread(() -> {
                    try {
                        houseKeeping.clean();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }).start();
            }
        }

//method in the housekeeping class.

public void clean() throws Exception {
        log.info("Initiate Housekeeping Task");
        Thread.sleep(delayTime);
        jdbcTemplate.getDataSource().getConnection().close();
        eventHubClient.close();
        configurableApplicationContext.close();
        System.exit(0);
    }
© www.soinside.com 2019 - 2024. All rights reserved.