【发布时间】:2012-02-22 13:58:15
【问题描述】:
以下是我的要求。
有一个屏幕,用户在其中输入文件名并单击提交。
点击 submit 时,必须触发 spring 批处理作业。批处理作业读取文件并填充数据库。
我们如何从 java 代码(特别是从 struts 动作类代码)调用 spring 批处理作业?
另外,我需要将文件名(用户在屏幕上输入的)传递给批处理程序。我们如何做到这一点?
【问题讨论】:
标签: java spring struts2 spring-batch
以下是我的要求。
有一个屏幕,用户在其中输入文件名并单击提交。
点击 submit 时,必须触发 spring 批处理作业。批处理作业读取文件并填充数据库。
我们如何从 java 代码(特别是从 struts 动作类代码)调用 spring 批处理作业?
另外,我需要将文件名(用户在屏幕上输入的)传递给批处理程序。我们如何做到这一点?
【问题讨论】:
标签: java spring struts2 spring-batch
Spring Batch 作业通过 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 MVC 和 Struts 来启动 Spring Batch 作业的方法是使用 Spring Batch Admin,它可以解决这个确切的问题等等(监控/停止/等等)
【讨论】:
Struts 动作类是普通类,您可以在其中编写任何您想编写的代码。 S2 将默认调用您的操作类中的执行方法,直到您在配置文件中指定任何其他方法名称。 您只需要执行以下步骤
为了从你的jsp发送文件名的值,你只需要创建一个输入字段,比如
<s:textfield name="fileName" id="fileName"/>
在您的操作类中创建一个名为fileName 的属性及其getter 和setter。您只需将文件名传递给您的批处理服务类方法即可。总之,您应该有一个类似的流程
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;
}
}
【讨论】: