专栏首页LeoXu的博客SpringMVC 项目中 Quartz 定时任务的设置纪要

SpringMVC 项目中 Quartz 定时任务的设置纪要

项目使用的是SpringMVC, 以前就已经集成了 1.x 版本的 Quartz,有专门的配置文件定义了需要的bean。

一、配置文件示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"
        >
        
	<!-- 定时装置所要执行的任务所在的类 -->
    <bean id="xxxJob" class="XXX"/>
    
	<!-- 引用任务描述 -->
    <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject">
		   
		   <!-- 引用任务方法所在的类 -->
           <ref bean="xxxJob" />
       </property>
       <property name="targetMethod">
           
		   <!-- 指定任务方法名称 -->
		   <value>xxxMenthod</value>
       </property>
    </bean>
    
    <!-- 配置触发器 -->
    <bean id="xxxTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
       <!-- 这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下 -->
       <property name="jobDetail">
	   
		   <!-- 引用任务描述bean -->
           <ref bean="methodInvokingJobDetail" />
       </property>
	   
       <!-- 每天的8点到21点每隔1分钟触发,具体说明见附录 -->
       <property name="cronExpression">
	   
		   <!-- 秒 分 时 日 月 周 年 -->
           <value>0 0 07,12,15,23 * * ?</value>
       </property>
    </bean>
 
	<!-- 配置任务工厂, 只能有一个这种bean -->
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       
	   <!-- 添加触发器 -->
       <property name="triggers">
           <list>
              <ref local="xxxTrigger" />
			  <!-- ... -->
           </list>
       </property>
    </bean>
</beans>

注意:schedulerFactory 只能定义一个,不然在工程启动的时候会报错。

二、实现程序对定时任务执行的控制

目前拟实现一个控制定时任务执行的服务类,供控制层调用,包括对运行中的Quartz中触发器的增、删和修改。

在这个服务类中,可以通过依赖注入注解拿到配置好的 SchedulerFactoryBean 和 触发器bean,例如:

@Autowired
SchedulerFactoryBean schedulerFactory;

@Autowired
CronTriggerBean xxxTrigger;

拿到 SchedulerFactoryBean 的 bean 以后,就可以借此获得获得 Scheduler 对象 scheduler :

Scheduler scheduler = schedulerFactory.getScheduler();

通过 scheduler 可以取消和新增任务计划的触发器了:

try {
	scheduler.unscheduleJob("xxxTrigger", Scheduler.DEFAULT_GROUP);
} catch (SchedulerException e) {
	e.printStackTrace();
}
try {
	String newExpression = "5/1 * * * * ?";
	xxxTrigger.setCronExpression(newExpression);
	scheduler.scheduleJob(xxxTrigger);
} catch (SchedulerException e) {
	e.printStackTrace();
} catch (ParseException e) {
	e.printStackTrace();
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android中的Fragment使用 原

    Android开发中Fragment主要用来提供更灵活的界面构造形式,顾名思义,英语中fragment一词就是片段的意思。我们可以创建一个扩展自Fragmen...

    LeoXu
  • [翻译]Android教程-保存数据-支持不同的平台版本

    展示 平台版本 的仪表盘会基于浏览过 Google Play Store的设备数量有规律的更新,来展示运行每一种版本Android的激活设备的分布. 一般...

    LeoXu
  • Android虚拟键盘挡住输入组件的解决办法 原

    如题,一开始遇到这个问题,请教了做苹果开发的哥们(做苹果的哥们好说话),他说要做监听,打开键盘的时候把会被遮住的输入组件向上移动。

    LeoXu
  • Spring Quartz任务案例源码实现

    写在开始 上一篇有讲到 springTask任务案例源码实现 此篇,spring整合Quartz实现更强大的定时任务。 任务介绍 Quartz存储job方式就...

    小柒2012
  • Spring之配置文件bean作用域的详细介绍

    Spring的配置文件applicationContext.xml中bean作用域的详细介绍: 1:对象的创建:单例和多例         scope="sin...

    别先生
  • Spring创建bean的三种方式

    Spring主要从两个角度来实现自动化装配:①组件扫描;②自动装配。组件扫描指的是Spring会自动扫描指定包及其子包下的所有bean,并将其放入s...

    用户4143945
  • java之spring mvc之ajax

    github地址:https://github.com/Vincent-yuan/springmvc_ajax

    Vincent-yuan
  • spring-boot 速成(6) 整合disconf

    spring-boot虽然不推荐使用xml文件做为配置文件,但是并没有把路堵死,所以与disconf的整合,仍旧可以沿用之前的xml方式来处理。 一、在Appl...

    菩提树下的杨过
  • 第8章—使用Spring Web Flow—Spring Web Flow的配置

    Spring Web Flow 是 Spring 的一个子项目,其最主要的目的是解决跨越多个请求的、用户与服务器之间的、有状态交互问题,比较适合任何比较复杂的、...

    Dream城堡
  • SpringMVC教程1[原理分析及注解方式的使用]

    用户4919348

扫码关注云+社区

领取腾讯云代金券