从java代码调用Spring批处理

从java代码调用Spring批处理,java,spring,struts2,spring-batch,Java,Spring,Struts2,Spring Batch,以下是我的要求 有一个屏幕,用户在其中输入文件名并单击提交 单击submit时,必须触发spring批处理作业。批处理作业读取文件并填充数据库 如何从java代码(特别是struts操作类代码)调用spring批处理作业? 另外,我需要将文件名(用户在屏幕上输入的)传递给批处理程序。我们如何实现这一点?Struts操作类是普通类,您可以编写希望在其中编写的任何代码。 S2将通过dafault在action类中调用execute方法,直到您在配置文件中指定了任何其他方法名称。 您只需执行以下步骤即

以下是我的要求

  • 有一个屏幕,用户在其中输入文件名并单击提交

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

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


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

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

  • 使用execute方法创建一个action类
  • 使用具有批处理逻辑的方法创建服务类
  • 从动作类调用服务类
  • 要从jsp发送文件名的值,只需创建一个输入字段,如

    <s:textfield name="fileName" id="fileName"/>
    
    JobLauncher Spring批处理作业通过启动(例如运行)。启动器的其中一个实现由框架提供,您可以在机箱外使用该框架:。看一下文档中的部分


    从Web容器中运行作业 虽然大多数时候批处理作业都是从命令行启动的(无论是否已计划),但有几种方法可以从web上执行。看看Spring批处理文档的一节

    这个想法很简单。您只需调用
    jobLauncher。从控制器中运行

    @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),但您可以看到它非常简单,适用于任何控制器/操作类:

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

    Spring批处理管理员
    启动Spring批处理作业而不必担心Spring MVC和Struts的另一种方法是使用一个可以解决这个确切问题和更多问题(监视/停止等)

    这并不能真正为这个用户解释Spring批处理方面的问题(答案是1),但这确实回答了他的问题的第二部分。@TreverShick:我同意你的看法。我的回答更多的是关于s2部分:)别忘了在JobParameters中添加“filename”以使job实例唯一。
    @Controller
    public class JobLauncherController {
    
        @Autowired
        JobLauncher jobLauncher;
    
        @Autowired
        Job job;
    
        @RequestMapping("/jobLauncher.html")
        public void handle() throws Exception{
            jobLauncher.run(job, new JobParameters());
        }
    }