现在有这样一个业务场景每天凌晨读取FTP服务器上的文件存入数据库中的表中,插入操作执行结束后,给另一个Job传递一个参数调这个Job执行一个更新另一个表的操作。现在将这两个步骤放在两个Job中,由其中一个Job触发另一个Job。
主Job代码如下:
//主Job,由定时器配置的时间定时执行读取文件入库操作
public class MainSyn extends QuartzJobBean
{
//读取文件的Service类
private ReadFileService readFileService;
//根据主Job传递参数更新表数据的Job类
private AssistSyn assistSyn;
public MainSyn()
{
//bean容器创建Service层实例
readFileService = (ReadFileService)SpringContextHolder.getApplicationContext().getBean("readFileService");
assistSyn = new AssistSyn();
}
//主要的读取文件的代码及调定时任务的方法
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException
{
try
{
Date date=new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//将需要传递给从定时任务的参数放入JobExecutionContext对象中
arg0.getMergedJobDataMap().put("queryTime", sdf.format(date));
//调用从Job的主体方法执行更新表的操作
assistSyn.execute(arg0);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
从Job代码如下:
public class AssistSyn extends QuartzJobBean
{
//更新表数据的Service类
private UpdateDataService updateDataService;
//根据主Job传递参数更新表数据的Job类
public AssistSyn()
{
//bean容器创建Service层实例
updateDataService = (UpdateDataService)SpringContextHolder.getApplicationContext().getBean("updateDataService");
}
//主要的更新表数据的代码逻辑
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException
{
try
{
//JobDataMap是Spring用于存放Job数据的容器,可以从中获取主Job放入的数据
JobDataMap data = arg0.getMergedJobDataMap();
String date = data.getString("arg");
//调用从Job的主体方法执行更新表的操作
Map<String, Object> paraMap=new HashMap<String, Object>();
paraMap.put("updateTime", date);
updateDataService.updateData(paraMap);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}