如何异步 运行 SystemCommandTasklet
How to run SystemCommandTasklet asynchronously
我想 运行 使用 Spring 批处理的 shell 脚本,让批处理控制作业 ID 和状态。但是我不希望我的应用程序 wait/hang 直到 shell 脚本 (SystemCommandTasklet) 完成。
@Override
@Bean(name = "myJobLauncher")
public SimpleJobLauncher getJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(getJobRepository());
//jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
@Bean
public Step myStep(Tasklet tasklet) {
return this.stepBuilderFactory.get("myStep")
.listener(tasklet)
.tasklet(tasklet)
.build();
}
@Bean
@StepScope
public SystemCommandTasklet systemCommandTasklet(@Value("#{jobParameters['dir']}") String dir,
@Value("#{jobParameters['command']}") String command) {
SystemCommandTasklet tasklet = new SystemCommandTasklet();
tasklet.setWorkingDirectory(dir);
tasklet.setCommand(command);
tasklet.setTimeout(100000);
return tasklet;
}
当我运行上面的代码时,batch/application等待直到'command'完成。
如果我添加 jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
那么它会失败并且没有记录任何错误。
我的代码的不同部分有问题。
添加 new SimpleAsyncTaskExecutor()
实际上有效。
我想 运行 使用 Spring 批处理的 shell 脚本,让批处理控制作业 ID 和状态。但是我不希望我的应用程序 wait/hang 直到 shell 脚本 (SystemCommandTasklet) 完成。
@Override
@Bean(name = "myJobLauncher")
public SimpleJobLauncher getJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(getJobRepository());
//jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
@Bean
public Step myStep(Tasklet tasklet) {
return this.stepBuilderFactory.get("myStep")
.listener(tasklet)
.tasklet(tasklet)
.build();
}
@Bean
@StepScope
public SystemCommandTasklet systemCommandTasklet(@Value("#{jobParameters['dir']}") String dir,
@Value("#{jobParameters['command']}") String command) {
SystemCommandTasklet tasklet = new SystemCommandTasklet();
tasklet.setWorkingDirectory(dir);
tasklet.setCommand(command);
tasklet.setTimeout(100000);
return tasklet;
}
当我运行上面的代码时,batch/application等待直到'command'完成。
如果我添加 jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
那么它会失败并且没有记录任何错误。
我的代码的不同部分有问题。
添加 new SimpleAsyncTaskExecutor()
实际上有效。