Spring进阶-怎样集成定时调度Quartz



在一些项目里面比如进销存系统,对一些过期图片的定时清理或者库存不足发出预警提示,就需要用到定时调度技术。

每当经过一段时间,程序会自动执行,就是定时调度。如果要使用定时调度,则必须保证程序始终运行才行哦,也就是说定时调度是在程序之外又启动了一个新的线程。那么怎样才能实现定时调度呢?

方案一:可以使用JDK自带的java.util.Timer对象。可以创建定制的timer或者调用某些方法的timer。包装timer的工作由Spring TimerFactoryBean完成,不过这种方法不能准确设置一个起始时间。

方案二:使用OpenSymphony Quartz框架。Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,网站地址:http://www.quartz-scheduler.org;它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行好几万个Jobs这样复杂的程序。(Struts2里面的WebWork就是来自OpenSymphony。)

Quartz使用Trigger, Job以及JobDetail等对象来进行各种类型的任务调度。为了让基于Spring的应用程序方便使用,Spring提供了一些类来简化quartz的用法。

开发步骤:

一、加入spring和quartz相关jar文件

二、Spring配置文件

1.Spring配置文件一:早期配置,麻烦

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 总管理类 如果将lazy-init=‘false‘那么容器启动就会执行调度程序 -->

<bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<ref bean="doTime" />

</list>

</property>

</bean>

<!-- 定义触发时间 -->

<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail">

<ref bean="jobtask" />

</property>

<property name="cronExpression">

<!-- cron表达式:在每天早上8点到晚上8点期间每1分钟触发一次 -->

<!-- <value>0 0/1 8-20 * * ?</value> -->

<!-- cron表达式:每5分钟触发一次 -->

<value>0 0/5 * * * ?</value>

</property>

</bean>

<!-- 定义调用对象和调用对象的方法 -->

<bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<!-- 调用的类 -->

<property name="targetObject" ref="quartzJob" />

<!-- 调用类中的方法名称 -->

<property name="targetMethod">

<value>work</value>

</property>

</bean>

<!-- 要调用的工作类 -->

<bean id="quartzJob" class="cd.itsource.pss.service.impl.QuartzJobServiceImpl">

<property name="baseDao" ref="baseDao" />

</bean>

</beans>

2.Spring配置文件二:加入spring命名空间,简化配置,强焊啊。原理就是在上面配置文件一的基础上spring再次做了一次封装,从而简化配置(具体可以看spring-task.xsd文件)。

<?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:task="http://www.springframework.org/schema/task"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">

<!-- cron表达式:在每天早上8点到晚上8点期间每1分钟触发一次 -->

<!--value>0 0/1 8-20 * * ?</value -->

<!-- cron表达式:每1分钟触发一次 -->

<!-- <value>0 0/1 * * * ?</value> -->

<!-- cron表达式:每天AM3点钟触发一次 -->

<!-- <value>0 0 3 * * ?</value> -->

<task:scheduled-tasks>

<!-- 执行quartzJob里面的work方法,执行频率是cron表达式 -->

<task:scheduled ref="quartzJob" method="work" cron="0 0/1 * * * ?" />

</task:scheduled-tasks>

<!-- 要调用的工作类 -->

<bean id="quartzJob" class="cn.itsource.pss.service.impl.QuartzJobServiceImpl">

<property name="baseDao" ref="baseDao" />

</bean>

</beans>

三、Junit

系统时间跑到整分的时候上面service的work方法自动被执行,间隔1分钟,再次被执行,后面循环执行。

时间: 2024-10-09 14:39:41

Spring进阶-怎样集成定时调度Quartz的相关文章

3、Spring新型方式实现定时调度

1.实现和循环调度类似 public class QuartzJob3{ public void test(){ SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss"); System.out.println("Spring新型方法-使用定时触发器-被调用"+sdf.format(new Date())); } } 2.Spring配置如下 (1)注入调度类对象(注入2个类对象,用不同方式触发) <!-- 注

Spring中的定时调度(Scheduling)和线程池(Thread Pooling)

简介 Spring包含了对定时调度服务的内置支持类.当前,Spring支持从JDK1.3开始内置的Timer类和Quartz Scheduler(http://www.opensymphony.com/quartz/).二者都可以通过FactoryBean,分别指向Timer或Trigger实例的引用进行配置.更进一步,有个对Quartz Scheduler和Timer都有效的工具类可以让你调用某个目标对象的方法(类似通常的MethodInvokingFactoryBean操作).Spring

TopShelf+Quartz.net实现基于window服务的定时调度

由于发布网站上Quartz.net的定时调度会被IIS回收不执行,解决的方法写Windows服务-案列[每天早晨8点删除过期35天的域名] 整了个三成架构:从Nuget成程序管理包下载Quart类库和TopShelf类库 1.创建定时调度Quartz类 1 class QuartzServiceRunner 2 { 3 private readonly IScheduler scheduler; 4 5 public QuartzServiceRunner() 6 { 7 scheduler =

Spring整合quartz框架实现任务定时调度

1.  首先需要引入需要的jar包,如上图所示. 2. 编写需要定时调度的测试类: package com.jp.task; import java.util.Date; public class TestTask{ private static int counter = 0; protected void execute() { long ms = System.currentTimeMillis(); System.out.println("\t\t" + "=====

Quartz与Spring集成——启动调度器

前言 在<Quartz与Spring集成--创建调度器>一文中介绍了调度器的创建过程,本文将分析其启动过程.熟悉Spring原理的人都知道AbstractApplicationContext的refresh方法的重要性,在refresh方法中调用了finishRefresh方法,最后会调用到SchedulerFactoryBean的start方法,其调用栈如图1所示. 图1 SchedulerFactoryBean的start方法的调用栈 根据图1的内容,我们知道spring容器初始化完毕的最

SpringMVC + Mybatis + SpringSecurity(权限控制到方法按钮) + Rest(服务) + Webservice(服务) + Quartz(定时调度)+ Lucene(搜索引擎) + HTML5 bootstrap + Maven项目构建绝对开源平台

框架整合: Springmvc + Mybatis + Shiro(权限) + REST(服务) + WebService(服务) + JMS(消息) + Lucene(搜搜引擎) + Quartz(定时调度) + Bootstrap Html5(支持PC.IOS.Android) 需要源码请加Q:3121026417   此处[源码获取地址] 框架简介: 项目Maven构建,真实大型互联网架构,做到高并发,大数据处理,整个项目使用定制化服务思想,提供模块化.服务化.原子化的方案,将功能模块进行

[Quartz笔记]玩转定时调度

简介 Quartz是什么? Quartz是一个特性丰富的.开源的作业调度框架.它可以集成到任何Java应用. 使用它,你可以非常轻松的实现定时任务的调度执行. Quartz的应用场景 场景1:提醒和告警 场景2:监听事务 场景3:定时作业 Quartz的安装 安装 1.可以直接在官网:http://www.quartz-scheduler.org/ 下载jar包. 2.如果使用maven,可以在pom.xml中添加以下依赖jar包: <dependency> <groupId>or

spring的定时调度

项目中要用到一个报表的运算服务器,项目一运行,就会启动相关的运算方法. 想了一圈,java web项目,spring是个万金油,什么都叫由它来管理.一查,还真有这个定时调度的功能. spring提供两种触发器,一个是CronTriggerBean,一个是SimpleTriggerBean. 好懒,长话短说吧. 环境: spring + ibatis,首先配置spring配置文件.写service层(具体的运算方法就写在这). 1). CronTriggerBea <!-- 定义job -->

定时调度框架Quartz随笔

最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少需要三个jar包,spring.jar.quartz.jar.commons-logging.jar,各个jar包版本的话目前具体还不清楚有什么要求,欢迎补充!本人用的如下: 二.jar包引入完毕,写好自己需要执行的任务类,在此给出个简单的demo: import org.quartz.JobExe