两者区别与作用:

普通任务:总调度(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普通任务与可传参任务的更多相关文章

  1. springboot-quartz普通任务与可传参任务

    两者区别与作用: 普通任务:总调度(SchedulerFactoryBean)--> 定时调度器(CronTriggerFactoryBean) --> 调度明细自定义执行方法bean(M ...

  2. Spring中RedirectAttributes对象重定向传参

    Spring3中的FlashAttribute 为 了防止用户刷新重复提交,save操作之后一般会redirect到另一个页面,同时带点操作成功的提示信息.因为是Redirect,Request里 的 ...

  3. MyBatis 强大之处 多环境 多数据源 ResultMap 的设计思想是 缓存算法 跨数据库 spring boot rest api mybaits limit 传参

    总结: 1.mybaits配置工2方面: i行为配置,如数据源的实现是否利用池pool的概念(POOLED – This implementation of DataSource pools JDBC ...

  4. spring mvc controller间跳转 重定向 传参(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  5. Spring cloud Feign不支持对象传参解决办法[完美解决]

    spring cloud 使用 Feign 进行服务调用时,不支持对象参数. 通常解决方法是,要么把对象每一个参数平行展开,并使用 @RequestParam 标识出每一个参数,要么用 @Reques ...

  6. Spring JdbcTemplate使用别名传参(NamedParameterJdbcTemplate)

    原文地址http://www.voidcn.com/article/p-cwqegtpg-hx.html 在使用JdbcTemplate时,一般传参都是用的?来绑定参数,但是对于某种情况就不适用了,例 ...

  7. axios&spring前后端分离传参规范总结

    前后端分离开发的场景下,开发人员的工作内容更加专注与专业,但是也产生了一些额外的沟通成本.比如:本文中为大家说明的前后端参数传递与接受方法.本文主要是面对前端使用axios,后端使用Spring进行参 ...

  8. spring MVC 转发与重定向(传参)

    return "forward:index.jsp"; //转发  return "forward:user.do?method=reg5"; //转发 ret ...

  9. Spring-quartz 可传参(包括service注入)任务调度 多个任务调度

    1 JobDetail 注意:一个JobDetail中 只能触发一个方法,如果要调度多个任务 需要有多个job类! 普通任务:总调度(SchedulerFactoryBean)--> 定时调度器 ...

随机推荐

  1. dpkg error

    在ubuntu乱搞,突然出现错误 dpkg: error: cannot read info directory: No such file or directory E: Sub-process / ...

  2. Delphi中WideString类型如何转化成String类型

    var wstr:WideString; str:string; begin str:=WideCharToString(PWideChar(wstr)); end;

  3. bzoj 1911 [Apio2010]特别行动队(斜率优化+DP)

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3191  Solved: 1450[Submit][Statu ...

  4. 关于cocos2d和cocos2dx,还有iOS上的cocos2d的ARC问题

    好吧,我承认这个我花了N个小时所做的努力都白费了. 事情的开始是这样的,今天在写cocos2dx的时候,测试发现总是出现溢出的问题,总是在main.m的autorelease报错.(好吧,如果我以后发 ...

  5. jboss as7 o.h.c.s.c.i.BroadcastGroupImpl Network is unreachable

    Question: [Server:server-one] 22:52:56,876 ERROR [org.hornetq.core.server.cluster.impl.BroadcastGrou ...

  6. 青蛙的约会 - poj 1061(扩展欧几里得)

    分析:这个东西在数论里面应该叫做不定方程式,可以搜一下,有很精彩的证明,先求出来方程式的一组特解,然后用这组特解来求通解,但是求出来特解之后怎么求这些解里面的最小非负x值?我们知道 x = x0 + ...

  7. 一些技术blog和安全blog

    1.安全blog: http://zenxds.com/blog/ http://navisec.it/ http://huaidan.org/ http://leapar.lofter.com/ h ...

  8. Java 执行jar linux 实例

    需求:通过执行jar的方式 ,把某个文件路径下的用户数据同步到redis 1.main 函数 public class Main { private static Logger logger = Lo ...

  9. Android color(颜色) 在XML文件和java代码中

    Android color(颜色) 在XML文件和java代码中,有需要的朋友可以参考下. 1.使用Color类的常量,如: int color = Color.BLUE;//创建一个蓝色 是使用An ...

  10. 排序算法c语言描述---堆排序

    排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析. 文章规划: 一.通过自己对排序算法本身的理解,对每个方法写个小测试程序.具体思路分析不 ...