两者区别与作用:

普通任务:总调度(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. wcf客户端捕获异常

    直接使用Exception进行捕获,然后在监视器中查看具体是哪一个异常 System.Exception {System.ServiceModel.Security.MessageSecurityEx ...

  2. 【转】更新SDK后,打包APK时报 the zipalign tool was not found in the sdk

    原文网址:http://wyong.blog.51cto.com/1115465/1546632 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任 ...

  3. Android protectionLevel

    Android protectionLevel分4个级别: "normal" "dangerous" "signature" "s ...

  4. UIColor的使用

    UIColor主要在设置各个控件的颜色的时候用得到,主要有以下几种方法创建UIColor: 1.使用RGBA创建: greenbluealpha]; 2.直接创建各个常用颜色:     [UIColo ...

  5. .net code injection

    .NET Internals and Code Injection http://www.ntcore.com/files/netint_injection.htm Windows Hooks in ...

  6. nyoj 710 外星人的供给站【贪心区间选点】

    外星人的供给站 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 外星人指的是地球以外的智慧生命.外星人长的是不是与地球上的人一样并不重要,但起码应该符合我们目前对生命 ...

  7. Java中如何使用Redis做缓存

    基本功能测试 1.程序基本结构 2.主要类 1)功能类 package com.redis; import java.util.ArrayList; import java.util.Iterator ...

  8. SQL 查询条件放在LEFT OUTER JOIN 的ON语句后与放在WHERE中的区别

    这两种条件放置的位置不同很容易让人造成混淆,以致经常查询出莫名其妙的结果出来,特别是副本的条件与主表不匹配时,下面以A,B表为例简单说下我的理解. 首先要明白的是: 跟在ON 后面的条件是对参与左联接 ...

  9. 转 jquery 学习笔记

    jQ通过选择器选择元素,选择器的语法和css类似$(css选择器语法) 参数可以是id.class.tag等等通过如上选择就可以获得一个元素 jQuery名字冲突 解决方法: var jq=jQuer ...

  10. block没那么难(一):block的实现

    本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> block 顾名思义就是代码块,将 ...