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实现动态启动,停止定时任务功能