接上期,当我们可以通过main方法执行一个spring batch的job后,如何让他们能按照我们的要求定时执行呢?
引入spring调度功能
spring3.0 已经集成了任务调度的机制,如果现在使用sping的话,就不需要象以前一样使用Quartz了,而可以直接使用spring框架本身提供的调度功能,方法是直接在javaconfig里面加入@EnableScheduling注解,代码如下:
@Configuration @ComponentScan("com.gs") @EnableBatchProcessing @EnableScheduling public class ConfigClass { //自行加入需要的代码 }
编写job方法
在容器中增加了调度支持之后,我们即可在我们相应的方法中,增加有关的调度配置,那么这个方法中的内容即是上期我们写在main方法中的内容,见代码:
@Service public class ScheduledTask { @Resource JobLauncher jobLauncher; @Resource Job job; @Scheduled(cron = "0 0/1 * * * ? ") public void syn(){ System.out.println("进行同步:"); try { jobLauncher.run(job, (new JobParametersBuilder()).addDate("runtime", new Date()).toJobParameters()); } catch (JobExecutionAlreadyRunningException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JobRestartException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JobInstanceAlreadyCompleteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JobParametersInvalidException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
上文中的@Scheduled(cron = "0 0/1 * * * ? ") 就是用来定义我们的定时调度配置,此处是一分钟一次。具体配置表达是类似的资料很多了,这里就不再行文赘述了。
修改main方法
既然已经启用了spring的调度功能,那么对于job的调用那么我们就交给了spring容器,而不再需要我们人工的方式去执行,那么我们原有的main方法中就只需要进行spring的容器初始化即可。当main方法执行后,大家即可看到调度的效果