以下是我的要求。
有一个屏幕,用户输入文件名并点击提交。
点击提交后,必须触发春季批处理作业。批处理作业读取文件并填充数据库。
我们如何从java代码(特别是struts动作类代码)调用spring批处理作业?
另外,我需要将文件名(用户在屏幕上输入的内容)传递给批处理程序。我们如何实现这一目标?
答案 0 :(得分:4)
Spring批处理作业通过JobLauncher启动(例如运行)。启动程序的其中一个实现由框架提供,您可以在框外使用:SimpleJobLauncher。请查看文档的Configuring a JobLauncher部分
虽然大多数时间批处理作业是从命令行启动的(计划与否),但有几种方法可以从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),但你可以看到它非常简单,适用于任何控制器/动作类:
jobLauncher
和job
=> setJobLauncher(...)/ setJob(...)jobLauncher
从jobLauncher.html
页面运行作业(注意:对run
的调用未阻止) 启动Spring Batch作业而不用担心Spring MVC和Struts的另一种方法是使用Spring Batch Admin来解决这个问题以及更多(监视/停止等等)
答案 1 :(得分:1)
Struts动作类是普通类,您可以在其中编写要编写的任何代码。 S2将通过dafault调用execute方法insdie你的动作类,直到你在配置文件中指定了任何其他方法名。 您只需执行以下步骤
要从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;
}
}