之前有写过通过MethodInvokingJobDetailFactoryBean来实现定时任务

还有一种方式是JobDetailBean来实现定时任务

下面来看怎么配置

1.application.xml文件中(任务调度配置触发器)

<import resource="job/clearing/merfile/create_merfile.xml"/>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="reconFileCheckTrigger"/> <!-- 检查是否生成商户对账文件 -->
</list>
</property>
<property name="autoStartup" value="true"/>
</bean>

 

<!-- SpringBatch定时任务配置 -->
<batch:job-repository />
</bean>

2.create_merfile.xml

<!-- 调度触发器 -->
<bean />
</map>
</property>
</bean>

<batch:job />
</batch:step>
</batch:job>

<bean />

 

3.JobLauncherDetailsCommon.java

 1 private static Logger logger = LoggerFactory.getLogger(JobLauncherDetailsCommon.class);
 2     private JobLauncher jobLauncher;
 3     private Job job;
 4     private JobParameterCommon jobParameterCommon;
 5     
 6     public void setJobLauncher(JobLauncher jobLauncher) {
 7         this.jobLauncher = jobLauncher;
 8     }
 9     public void setJob(Job job) {
10         this.job = job;
11     }
12     public void setJobParameterCommon(JobParameterCommon jobParameterCommon) {
13         this.jobParameterCommon = jobParameterCommon;
14     }
15     
16     protected void executeInternal(JobExecutionContext context) {
17         
18         JobExecution result = null;
19         try {
20             result = jobLauncher.run(job, jobParameterCommon.getJobParametersFromJobMap());
21             
22         } catch (Exception e) {
23             logger.error("执行job失败,job名称:{}", new Object[]{job.getName()}, e);
24             throw new ApplicationException("执行job失败");
25         }
26         
27         ExitStatus es = result.getExitStatus();
28         String exitCode = es.getExitCode();
29         if (ExitStatus.COMPLETED.getExitCode().equals(exitCode)) {
30             logger.info("任务执行完成,job名称:{};exitCode={};exitDesc={}", new Object[]{job.getName(), exitCode, es.getExitDescription()});
31             
32         } else {
33             logger.debug("任务执行失败,job名称:{};exitCode={};exitDesc={}", new Object[]{job.getName(), exitCode, es.getExitDescription()});
34         }
35     }

其实吧这两种呢都可以实现定时任务就是看执行的一个实在RAM中(第一种)一个是运行在RDB中(第二种),鄙人动手能力也不强,我也没试过只是看别人有这么解析的,参考文章可以看:

http://donald-draper.iteye.com/blog/2323591

相关文章: