• spring+quartz定时任务配置---JobDetailBean


     之前有写过通过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 id="jobRepository" data-source="dataSource" transaction-manager="transactionManagerClear" isolation-level-for-create="REPEATABLE_READ" table-prefix="BATCH_" max-varchar-length="1000" />
    <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
    </bean>

    2.create_merfile.xml

    <!-- 调度触发器 -->
    <bean id="reconFileCheckTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="reconFileCheckJobDetail" />
    <property name="cronExpression" value="0 45 10 ? * *" />

    </bean>
    <!-- 配置调度程序quartz -->
    <bean id="reconFileCheckJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="com.ninefbank.smallpay.clear.JobLauncherDetailsCommon" />
    <property name="jobDataAsMap">
    <map>
    <entry key="job" value-ref="reconFileCheckJob" />
    <entry key="jobLauncher" value-ref="jobLauncher" />
    <entry key="jobParameterCommon" value-ref="jobParamsCheckFile" />
    </map>
    </property>
    </bean>

    <batch:job id="reconFileCheckJob" job-repository="jobRepository">
    <batch:step id="reconFileCheckStep1">
    <batch:tasklet ref="reconFileCheck"/>
    </batch:step>
    </batch:job>

    <bean id="jobParamsCheckFile" class="com.ninefbank.smallpay.clear.JobParameterCommonChild" />

    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

  • 相关阅读:
    洛谷 P4861 按钮
    《情人》
    bzoj1019: [SHOI2008]汉诺塔(dp)
    hdu5698瞬间移动(组合数,逆元)
    poj Code(组合数)
    组合数 牛顿二项式定理 杨辉三角
    8.22 NOIP 模拟题
    codevs2495 水叮当的舞步(IDA*)
    codevs 2541 幂运算(迭代加深搜索)
    较复杂搜索,剪枝
  • 原文地址:https://www.cnblogs.com/sailormoon/p/8432012.html
Copyright © 2020-2023  润新知