1 JobDetail

注意:一个JobDetail中 只能触发一个方法,如果要调度多个任务 需要有多个job类!

普通任务:总调度(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方法,使用该调度明细任务无法使用自定义方法。

-------------------------------------------------------------------------- Spring配置-------------------------------------------------------------------------------

 用的spring,需要在XML里面往JobDetailBean注入一个org.quartz.JobDataMap作为参数.在类里面可以直接取出来.(如果不用spring,可以直接配置job-data-map)
 
参数:
如果需要注入service 则:<entry key="testService" value-ref="testService" />
job类中:@autowired
     TestService testService
在重写的 protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException 方法中
  protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
 
   JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();    
 
  testService =(TestService ) jobDataMap .get("testService");  //取Service 一定要在方法外@autowired
 
  int one= jobDataMap.getInt("one"); //取普通参数
}
 
另外:使用这种方法配置jobDetail时 一定要加下面这行属性
<property name="durability" value="true" />
  
<bean id="hasReturnParm" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="one" value="1" />
            <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>
<property name="durability" value="true" />  
</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>
 
多个任务调度时候的总调度SchedulerFactoryBean 这样写就可以啦!
<bean  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
   <property name="triggers">
    <list>
     <ref local="cronTrigger_1" />
     <ref local="cronTrigger_2" />
    </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());
        }
    }
}
--------------------------------------------------------------------SpringMVC配置---------------------------------------------------------------------------------------------------
<import resource="spring-context-task.xml"/>   使用SSM时 一定要引入这一行!不然定时器不起作用!
PS:大多是参考 并记录一下!

Spring-quartz 可传参(包括service注入)任务调度 多个任务调度的更多相关文章

  1. spring MVC 尝试传参json(应用部分)

    spring 3.1后增加新的注解:@Requestbody,@Responsebody, 暂不论Requestdody, 若想让后端代码直接返回json字符串,可使用@Responsebody, 用 ...

  2. Spring MVC URL传参

    Spring MVC 学习 之 - URL参数传递   在学习 Spring Mvc 过程中,有必要来先了解几个关键参数:    @Controller: 在类上注解,则此类将编程一个控制器,在项目启 ...

  3. Spring Swagger URL传参问题(转)

    代码例子: @ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息") @ApiImplicitPar ...

  4. Spring MVC POJO传参方式

    有两POJO类 Address.java package com.proc; public class Address { private String province; private Strin ...

  5. spring mvc 重定向传参

    参考链接如下: http://bbs.csdn.net/topics/391034118?page=1 自己的示例程序: 详细页面提交一个修改动作,修改完成后跳转到检索页面,把检索条件重新赋值给检索页 ...

  6. 解决Spring MVC前台传参中文乱码问题

    在web.xml文件中配置字符编码过滤器: <filter> <filter-name>CharacterEncoding</filter-name> <fi ...

  7. Spring boot+Thymeleaf传参跳转

    $.ajax(): $.ajax({ type: "get", url:"/public/inform", async: true, data: detailJ ...

  8. 【service调用dao层传参的三种方式】

    第一种方案:默认数组角标: service Public User selectUser(String name,String area); mapper: <select id="s ...

  9. Spring quartz定时任务service注入问题

    今天想单元测试一下spring中的quartz定时任务,job类的大致结构和下面的SpringQtz1类相似,我的是实现的org.quartz.Job接口,到最后总是发现job类里注入的service ...

随机推荐

  1. Docker存储驱动之AUFS简介

    简介 AUFS是曾是Docker默认的首选存储驱动.它非常稳定.有很多真实场景的部署.很强的社区支持.它有以下主要优点: 极短的容器启动时间. 有效的存储利用率. 有效的内存利用率. 虽然如此,但由于 ...

  2. 每天一个linux命令(52)--wc命令

    Linux 系统中的 wc(word count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出 1.命令格式: wc [选项] 文件 2.命令功能: 统计指定文件中的字节数.字 ...

  3. echarts动态添加数据(饼图为例)

    $.ajax({type : "POST",async : false,url : '${ctx}/basic/bsAllPictureGuarantee/pictJson',da ...

  4. C++ 11和C++98相比有哪些新特性

    此文是如下博文的翻译: https://herbsutter.com/elements-of-modern-c-style/ C++11标准提供了许多有用的新特性.这篇文章特别针对使C++11和C++ ...

  5. IIS HTTP 错误 500.19 - Internal Server Error HTTP 错误 401.3 - Unauthorized 解决办法

    前言:IIS是一个强大的服务器管理器,当遇到 IIS HTTP 错误 500.19 - Internal Server Error  HTTP 错误 401.3 - Unauthorized 的解决办 ...

  6. css3 的 calc()函数在布局中的使用----头部高度固定,页面正好占满一屏

    最近项目遇到一个布局需求,头部高度固定,页面需要刚好占满一屏幕. 如下示意图: 方法:使用calc .wrap{ position: relative; margin-left: 24px; marg ...

  7. otool介绍(转http://www.mc2lab.com/?p=68)

    1. Otool简介 Otool可以提取并显示ios下目标文件的相关信息,包括头部,加载命令,各个段,共享库,动态库等等.它拥有大量的命令选项,是一个功能强大的分析工具,当然还可以做反汇编的工具使用. ...

  8. CSS3 贝塞尔曲线实现

    cubic-bezier 曲线是 css3 动画的一个重要基石.另一个为 steps (ease 等都是 cubic-bezier 的特殊形式),css3 中的 cubic_bezier 曲线限制了首 ...

  9. 解决HTML textarea 标签出现大量空格

    就是什么内容也不写,然后前面却有一堆空格 原因是 textarea标签换行了 <textarea cols=" id="serve_content" name=&q ...

  10. 【G】开源的分布式部署解决方案文档 - 使用手册

    G.系列导航 [G]开源的分布式部署解决方案 - 导航 已知问题 导航没有联动 因为权限只是做了基础的登录校验,考虑到后面导航要跟权限关联上暂时是写死的. 只有部分界面使用了Vue.js 因为刚开始没 ...