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. C++之priority_queue

    前言 最近越来越觉得自己总结的事情越来越流水账,因此,我需要提高我总结内容的精度.所以可能会导致写博客的时间会延长一些. 之前从没用过优先队列,刷算法题目的时候才开始了解的,所以做个总结.什么情况下使 ...

  2. PHP字符串三种定义方式

    PHP的字符串有三种定义方式:单引号 .双引号 .定界符  1.单引号:指定一个简单字符串的最简单的方法是用单引号(字符 ')括起来. 在被单引号括起来的字符串中,要再表示一个单引号,需要用反斜线(\ ...

  3. 读书笔记 effective c++ Item 10 让赋值运算符返回指向*this的引用

    一个关于赋值的有趣的事情是你可以将它们链在一起: int x, y, z; x = y = z = ; // chain of assignments 同样有趣的是赋值采用右结合律,所以上面的赋值链被 ...

  4. WEB标准了解

    今天看到朋友的简历有一项“了解WEB标准”,就特地了解了一下什么是WEB标准.现在就一项一项地解开自己的疑惑. 1.什么是WEB标准 WEB标准大部分由万维网组织(W3C)制定的WEB程序开发规范.W ...

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

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

  6. Python基础入门教程(4)(数据类型)

    人生苦短,我学Pyhton Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于199 ...

  7. C#集合的应用以及和数组比较,它的好处有哪些

    我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类.我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和 ...

  8. 徒手用Java来写个Web服务器和框架吧<第一章:NIO篇>

    因为有个不会存在大量连接的小的Web服务器需求,不至于用上重量级服务器,于是自己动手写一个服务器. 同时也提供了一个简单的Web框架.能够简单的使用了. 大体的需求包括 能够处理HTTP协议. 能够提 ...

  9. ActiveMQ学习系列(四)----消息持久化到mysql

    前记:目前学习还比较杂乱,还未找到系统化地学习ActiveMq的方法.在网上看到消息持久化的demo,了解了一下,在此记录. 一.目前ActiveMq支持的持久化方法 url:http://activ ...

  10. PHP文本的读写

    <?php $txtPart="test0.txt"; //export $txtPartContent=fopen($txtPart,"r"); //读 ...