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