从java代码调用Spring Batch

时间:2012-02-22 13:58:16

标签: java spring struts2 spring-batch

以下是我的要求。

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

  2. 点击提交后,必须触发春季批处理作业。批处理作业读取文件并填充数据库。

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

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

2 个答案:

答案 0 :(得分:4)

JobLauncher

Spring批处理作业通过JobLauncher启动(例如运行)。启动程序的其中一个实现由框架提供,您可以在框外使用:SimpleJobLauncher。请查看文档的Configuring a JobLauncher部分


从Web容器中运行作业

虽然大多数时间批处理作业是从命令行启动的(计划与否),但有几种方法可以从Web上执行。请查看Spring Batch文档的Running Jobs from within a Web Container部分。

这个想法很简单。您只需从控制器中调用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());
    }
}

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

    注入
  • jobLauncherjob => setJobLauncher(...)/ setJob(...)
  • jobLauncherjobLauncher.html页面运行作业(注意:对run的调用未阻止)

Spring Batch Admin

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

答案 1 :(得分:1)

Struts动作类是普通类,您可以在其中编写要编写的任何代码。 S2将通过dafault调用execute方法insdie你的动作类,直到你在配置文件中指定了任何其他方法名。 您只需执行以下步骤

  1. 使用execute方法创建一个动作类。
  2. 使用具有批处理逻辑的方法创建服务类。
  3. 从您的操作类
  4. 调用服务类

    要从jsp发送文件名的值,您需要创建一个输入字段,如

    <s:textfield name="fileName" id="fileName"/>
    

    在您的操作类中创建一个名为fileName的属性及其getter和setter。您需要将文件名传递给批处理服务类方法。简而言之,您应该有一个类似于此的流程< / p>

    public class BatchProcessingAction extends ActionSupport{
    
        private string fileName;
        private ServiceClass serviceClass;
    
        getter ans setter for above defined properties
    
        public string execute() throw Exeption{
                serviceclass=new ServiceClass();  // can use Di or factory for this
                serviceClass.executeBatchProcessing(fileName);
                return SUCCESS;
        }
    
    }