弹出批处理线程在主线程执行完成后没有返回

时间:2012-12-04 09:18:57

标签: multithreading spring spring-batch

我是春季批次的新手。我已经通过使用多个线程从spring创建并成功执行了job,并且它工作得非常好,除了当程序执行完成时,程序流程不会结束/停止。即使主要方法的最后一个语句被执行,程序也不会退出。我不确定它是否继续等待线程完成或什么。有人可以就此提出建议吗? “下面是我的工作配置文件

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
            <property name="corePoolSize" value="5" />
            <property name="maxPoolSize" value="5" />
</bean>

<batch:job id="helloWorldJob" job-repository="jobRepository">
       <batch:step id="step0" next="step1">
                <batch:tasklet ref="hello" transaction-manager="transactionManager" task-executor="taskExecutor" />
       </batch:step>        
       <batch:step id="step1">
                <batch:tasklet ref="world" transaction-manager="transactionManager" />
       </batch:step>
</batch:job>  

以下是启动码

public static void main(String args[]) {
        try {
            new ClassPathXmlApplicationContext("simpleJob.xml");

            JobParametersBuilder builder = new JobParametersBuilder();
            builder.addString("Date", "12/02/2011");
            jobLauncher.run(job, builder.toJobParameters());

            JobExecution jobExecution = jobRepository.getLastJobExecution(job.getName(), builder.toJobParameters());

            System.out.println("\n\n"+jobExecution.toString());
            Thread.sleep(5000);
            System.out.println("End of execution ");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

如上所述,代码运行在5个不同的线程中,用于任务“hello”,一次用于任务“world”,尽管它不会使主程序的执行停止,即使在主方法的最后一行“结束执行“被执行。 任何链接白皮书都会受到极大的关注。 提前致谢 萨米尔

1 个答案:

答案 0 :(得分:1)

您的线程池未被关闭。可能最好的方法是在你的应用程序上下文中调用close()(在finally块中是安全的)。