Spring整合quartz实现定时动态任务

Posted 依米欧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring整合quartz实现定时动态任务相关的知识,希望对你有一定的参考价值。

在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类。很显然,第二种方式远比第一种方式来的灵活。

这里使用MethodInvokingJobDetailFactoryBean,任务类可以不实现Job接口,通过targetMethod指定调用方法,实现定时动态任务功能。

    <bean id="addHandlePayCashApplyToMq"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!-- 使用MethodInvokingJobDetailFactoryBean,任务类可以不实现Job接口,通过targetMethod指定调用方法 -->
        <property name="targetObject" ref="batchJobService"/> 
        <property name="targetMethod" value="addHandlePayCashApplyToMq" /> <!-- 要执行的方法名称 -->
      <!--false表示等上一个任务执行完后再开启新的任务--> <property name="concurrent" value="false"/> </bean>
<!--触发器-->
<bean id="addHandlePayCashApplyToMqBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
      <property name="jobDetail" ref="addHandlePayCashApplyToMq" />
        <property name="cronExpression" value="${transaction_batchjob_cronExpression_addHandlePayCashApplyToMqBean}" />//配置定时器时间
    </bean>
<!--调度工厂-->
<!-- ======================== 调度工厂 ======================== -->
    <bean id="SpringJobSchedulerFactoryBean"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="addHandleCashApplyToMqBean" />
                <ref bean="addHandlePayCashApplyToMqBean" />
                <ref bean="addTeamListToMqBean" />
            </list>
        </property>
    </bean>
quartz-cronExpression.properties
#Transaction处理提现申请,周一至周五中午12点 transaction_batchjob_cronExpression_addHandlePayCashApplyToMqBean
=30 * * ? * MON-FRI

 BatchJobService定时器触发后执行的方法:

@Component
public class BatchJobService {
    private Logger logger = LoggerFactory.getLogger(getClass());private static final String callback_url_addHandlePayCashApplyToMq = "/transaction/superApp/addHandlePayCashApplyToMq";//请求回调方法public void addHandlePayCashApplyToMq() {
        logger.info("addHandlePayCashApplyToMq start");
        try {
            String requestUrl = SuperAppConstant.TRANSACTION_CALLBACK_PREFIX_URL + callback_url_addHandlePayCashApplyToMq ;
            JSONObject jsonObject = RF.httpsRequestJson(requestUrl, "POST", "");//不同项目间的方法调用。使用http请求调用方法
            if(jsonObject != null){
                String code = jsonObject.getString("code");
                String message = jsonObject.getString("message");
                logger.info("code="+code);
                logger.info("message="+message);    
            }else{
                logger.error("jsonObject is null");
            }
        } catch (Exception ex) {
            logger.error(ex.getMessage(), ex);
        }
        logger.info("addHandlePayCashApplyToMq end");
    }

 

以上是关于Spring整合quartz实现定时动态任务的主要内容,如果未能解决你的问题,请参考以下文章

spring与quartz整合实现分布式动态创建,删除,改变执行时间定时任务(mysql数据库)

SpringBoot整合quartz实现动态启动,停止定时任务功能

Spring4 Quartz2 动态任务,Spring4整合quartz2.2.3简单动态任务

Spring+Quartz 整合二:调度管理与定时任务分离

Spring与Quartz的整合实现定时任务调度

Spring 3整合Quartz 2实现定时任务一:常规整合 (基于maven构建) - mjorcen(转)