spring-quartz普通任务与可传参任务
两者区别与作用:
普通任务:总调度(SchedulerFactoryBean)--> 定时调度器(CronTriggerFactoryBean) --> 调度明细自定义执行方法bean(MethodInvokingJobDetailFactoryBean) -->调度bean(我们定义的job类)
可传参任务:总调度(SchedulerFactoryBean)--> 定时调度器(CronTriggerFactoryBean) --> 调度明细bean(JobDetailFactoryBean)
如上是我们在配置调度器时的具体步骤及相互之间的依赖,区别主要在调度明细bean上,普通任务是(MethodInvokingJobDetailFactoryBean),而可传参任务是(JobDetailFactoryBean):
1)普通任务可以自定义执行方法,也就是说在其配置的调度bean(我们定义的job类)中我们可以自定义调度器最终执行的方法,可以叫work1也可以叫work2,and so on。而且要记住的一点,必须是无入参的方法!!!(做了一个测试,测试目的是看通过此类型调度类型是否也能传入参数所以定义了一个带入参的自定义方法即public void work(JobExecutionContext jobExecutionContext),最中测试结果是spring quartz会报找不到work方法及No such method work(),其默认执行我们生命的work无入参的方法。
2)可传参任务必须继承QuartzJobBean,重写protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException方法,其中JobExecutionContext就是我们在定义调度器明细时传入参数的上下文,我们可以通过JobExecutionContext取出传入的map,调度任务最终执行的就是executeInternal方法,使用该调度明细任务无法使用自定义方法。
两种配置方式:
----------------------------------------------------------------普通任务----------------------------------------------------------------
public class NormalJob {
/*不会调此方法,如果仅生命此方法会报No such Method work
public void work(JobExecutionContext jobExecutionContext){
JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
for (Map.Entry entry : jobDataMap.entrySet()){
System.out.println("key Normal ---: " + entry.getKey() + "value Normal---: " + entry.getValue());
}
}*/
public void work(){
System.out.println("33333333333333333333333333333333333333");
}
}
<!-- 封装工作任务处理的工作类 -->
<bean id="quartzJob" class="com.x.x.job.NormalJob" /> <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
<property name="targetObject">
<ref bean="quartzJob" />
</property>
<property name="targetMethod">
<value>work</value>
</property>
</bean>
<bean id="excuteTime" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="jobtask" />
</property>
<!--<property name="jobDataMap">
<ref bean="hasReturnData"></ref>
</property>-->
<property name="cronExpression">
<value>${cron.every10minute}</value>
</property>
</bean> <!-- 总管理类(调度程序启动模块) 如果将lazy-init="false"那么容器启动就会执行调度程序 -->
<bean id="startQuartz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="excuteTime" />
<!--<ref bean="every10minute" />-->
</list>
</property>
</bean>
------------------------------------------------------------可传参任务任务--------------------------------------------------------------------
public class CanTransferParm extends QuartzJobBean{
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
for (Map.Entry entry : jobDataMap.entrySet()){
System.out.println("key---: " + entry.getKey() + "value---: " + entry.getValue());
}
}
}
<bean id="hasReturnParm" class="org.quartz.JobDataMap">
<constructor-arg>
<map>
<entry key="validateVendorQuotationInterface" value="http://x.x.x.x/validateVendorQuotationInterface" />
<entry key="validateComparsionInterface" value="http://x.x.x.x/validateComparsionInterface" />
</map>
</constructor-arg>
</bean>
<bean id="hasReturnJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.x.x.CanTransferParm" />
<property name="jobDataMap">
<ref bean="hasReturnParm"></ref>
</property>
</bean>
<bean id="every5minute" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 工作类bean -->
<property name="jobDetail">
<ref bean="hasReturnJobDetail" />
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<value>${cron.every5minute}</value>
</property>
</bean> <bean id="startQuartz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="every5minute" />
</list>
</property>
</bean>
spring-quartz普通任务与可传参任务的更多相关文章
- springboot-quartz普通任务与可传参任务
两者区别与作用: 普通任务:总调度(SchedulerFactoryBean)--> 定时调度器(CronTriggerFactoryBean) --> 调度明细自定义执行方法bean(M ...
- Spring中RedirectAttributes对象重定向传参
Spring3中的FlashAttribute 为 了防止用户刷新重复提交,save操作之后一般会redirect到另一个页面,同时带点操作成功的提示信息.因为是Redirect,Request里 的 ...
- MyBatis 强大之处 多环境 多数据源 ResultMap 的设计思想是 缓存算法 跨数据库 spring boot rest api mybaits limit 传参
总结: 1.mybaits配置工2方面: i行为配置,如数据源的实现是否利用池pool的概念(POOLED – This implementation of DataSource pools JDBC ...
- spring mvc controller间跳转 重定向 传参(转)
spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...
- Spring cloud Feign不支持对象传参解决办法[完美解决]
spring cloud 使用 Feign 进行服务调用时,不支持对象参数. 通常解决方法是,要么把对象每一个参数平行展开,并使用 @RequestParam 标识出每一个参数,要么用 @Reques ...
- Spring JdbcTemplate使用别名传参(NamedParameterJdbcTemplate)
原文地址http://www.voidcn.com/article/p-cwqegtpg-hx.html 在使用JdbcTemplate时,一般传参都是用的?来绑定参数,但是对于某种情况就不适用了,例 ...
- axios&spring前后端分离传参规范总结
前后端分离开发的场景下,开发人员的工作内容更加专注与专业,但是也产生了一些额外的沟通成本.比如:本文中为大家说明的前后端参数传递与接受方法.本文主要是面对前端使用axios,后端使用Spring进行参 ...
- spring MVC 转发与重定向(传参)
return "forward:index.jsp"; //转发 return "forward:user.do?method=reg5"; //转发 ret ...
- Spring-quartz 可传参(包括service注入)任务调度 多个任务调度
1 JobDetail 注意:一个JobDetail中 只能触发一个方法,如果要调度多个任务 需要有多个job类! 普通任务:总调度(SchedulerFactoryBean)--> 定时调度器 ...
随机推荐
- Android笔记:触摸事件的分析与总结----TouchEvent处理机制
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://glblong.blog.51cto.com/3058613/1559320 ...
- java桌面项目打包_by icewee_写得太棒了,直接转载了
前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: ecl ...
- Asp.Net MVC向视图View传值的三种常见的方法:
1.通过View( parameter )的参数传递 action: public ActionResult Index() { Person person=new Person("wumi ...
- (转载)php获取mysql版本的几种方法小结
(转载)http://www.jb51.net/article/13930.htm 查询当前连接的MYSQL数据库的版本,可以用下面SQL语句来实现 select VERSION(); 当前$res= ...
- 4G来临 IT业转型之路当在不远
摘 要:4G商用未启,品牌营销争夺已经展开.目前,除了中国移动推出全新4G品牌“andM”之外,中国电信和中国联通均选择继续沿用3G的品牌. 4G商用未启,品牌营销争夺已经展开.12月10日,中国电信 ...
- php 下载
$file='url.xlsx'; if (file_exists(EA_DIR_DATA . $file)) { header('Content-Description: Fi ...
- Palindrome - URAL - 1297(求回文串)
题目大意:RT 分析:后缀数组求回文串,不得不说确实比较麻烦,尤其是再用线段数进行查询,需要注意的细节地方比较多,比赛实用性不高......不过练练手还是可以的. 线段数+后缀数组代码如下: ...
- 关于数据库一致改关闭下redo日志文件丢失的处理办法的总结
数据库一致性关闭下redo日志文件丢失的处理办法(归档和非归档都行) 1. inactive log 在一致性关闭后删除重启时可以在mount下(不丢失数据) alter database clea ...
- “发送至Onenote”惹来的小麻烦(转)
原文来自 : http://blog.csdn.net/yiyu_0417/article/details/7864172 [看到这篇文章,我觉得以后我也会遇到这个问题,很有价值我就先拷贝了,留着以 ...
- DOS命令创建以日期为文件名的任务计划TXT文件
因为每天早上都要做计划,所以做了个批处理文件来创建任务计划TXT文件 文件内容展示如下: 2013/07/09 周二 今日任务: 1. 2. 待办任务: 1. 2. 出现问题: 解决办法: 出现问题: ...