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. Ceph部署(二)RGW搭建

    背景 Ceph RGW简介 Ceph RGW基于librados,是为应用提供RESTful类型的对象存储接口.RGW提供两种类型的接口: 1) S3:兼容Amazon S3RESTful API: ...

  2. eclipse不能写入classpath

    问题 更改工程的Build Path,出现如下问题:     Could not write file: G:\Java\myJavaPro\EJBEntityBean\.classpath. G:\ ...

  3. VS2012 百度云下载 开发工具

    百度云下载地址:链接: http://pan.baidu.com/s/1qWDIDPi密码: 5nr0 ASP.NET MVC4.0+ WebAPI+EasyUI+KnockOutJS快速开发框架 通 ...

  4. JavaScript知识点总结

    JavaScript学习总结1.JavaScript是作用于网络和HTML的一个编程语言.2.JavaScript代码必须放在<script></script>标签之间,Jav ...

  5. 初识Windous程序

    文本框Label MaxLength 设置输入文本最大字符 Multiline  表示是否输入多行文本 passwodechar 指示在文本框显示的字符,而不是实际内容 ReadeOnly 表示是否可 ...

  6. 串匹配模式中的BF算法和KMP算法

    考研的专业课以及找工作的笔试题,对于串匹配模式都会有一定的考察,写这篇博客的目的在于进行知识的回顾与复习,方便遇见类似的题目不会纠结太多. 传统的BF算法 传统算法讲的是串与串依次一对一的比较,举例设 ...

  7. 【原】cookie小结

    前记:前段时间搞一个活动,开发的时间被严重压缩,忙到飞起,以致于都没怎么写文章了,内疚. 2月份参加了一场面试,有一些关于cookie的问题回答的不是很好,所以这篇文章我们来对cooKie做一个探讨和 ...

  8. AVFoundation自定义录制视频

    #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> @interface ...

  9. iOS切圆角的几个方法

    这几天在研究到切圆角的方法,也找了下网上的资料 ---------- 切圆角尽量避免离屏渲染. 1.直接用视图中layer中的两个属性来设置圆角,这种方法比较简单,但是及其影响性能不推荐:  @pro ...

  10. 蓝牙DA14580开发:固件格式、二次引导和烧写

    嵌入式企鹅圈原创团队成员黄鑫提供. 相比NRF52832和CC254X,蓝牙单芯片DA14580在OTA和二次引导上要复杂一些,不仅体现在memory map.引导过程等流程上,而且在固件格式.生成和 ...