从 Java 代码调用 Spring Batch

use*_*434 4 java spring struts2 spring-batch

以下是我的要求。

  1. 有一个用户输入文件名并点击提交的屏幕。

  2. 单击 submit 时,必须触发 spring 批处理作业。批处理作业读取文件并填充数据库。

我们如何从 java 代码(特别是从 struts 操作类代码)调用 spring 批处理作业?

另外,我需要将文件名(用户在屏幕上输入的)传递给批处理程序。我们如何实现这一目标?

tol*_*ius 5

工作启动器

Spring Batch 作业通过JobLauncher启动(例如运行)。启动器的一种实现是由您可以在框外使用的框架提供的:SimpleJobLauncher。查看文档的配置 JobLauncher部分


从 Web 容器内运行作业

虽然大多数情况下批处理作业是从命令行启动的(已调度或未调度),但有几种方法可以从 Web 执行此操作。查看Spring Batch 文档的 Web Container部分中的Running Jobs

这个想法很简单。您只需jobLauncher.run从控制器内部调用:

@Controller
public class JobLauncherController {

    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    Job job;

    @RequestMapping("/jobLauncher.html")
    public void handle() throws Exception{
        jobLauncher.run(job, new JobParameters());
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 Spring MVC(不是 Struts),但您可以看到它非常简单,并且适用于任何控制器/动作类:

  • jobLauncher并被job注入 => setJobLauncher(...) / setJob(...)
  • jobLauncherjobLauncher.html页面运行作业(注意:调用run不会阻塞)

Spring批处理管理员

启动 Spring Batch 作业而完全不担心 Spring MVC 和 Struts 的另一种方法是使用Spring Batch Admin来解决这个确切的问题以及更多(监视/停止/等)