zoukankan      html  css  js  c++  java
  • 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");
        }
  • 相关阅读:
    10分钟学会SpringBoot入门
    单链表常见的4道笔试题(Java版)
    Java面试、跳槽必刷200+真面试题,让你披荆斩棘走进大厂
    金三银四JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等
    最新整理的spring面试题从基础到高级,干货满满
    面试阿里百分百问的Jvm,别问有没有必要学,真的很有必要朋友
    面试官:你们前后端分离的接口规范是什么?
    “金九银十”已过,总结我的天猫、蚂蚁、头条面试经历(Java岗)
    350道面试题分享,拿下京东offer工资double
    2019大厂Java岗面试题全曝光,刷完这1020道,金三银四大厂等你
  • 原文地址:https://www.cnblogs.com/ouyanxia/p/7205926.html
Copyright © 2011-2022 走看看