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

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

方案一:可以使用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分钟,再次被执行,后面循环执行。

你还在等什么,试试吧。

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

  1. Spring Quartz定时调度任务配置

    applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...

  2. Spring中实现定时调度

    1,   内容简介 所谓的定时调度,是指在无人值守的时候系统可以在某一时刻执行某些特定的功能采用的一种机制,对于传统的开发而言,定时调度的操作分为两种形式: 定时触发:到某一时间点上执行某些处理操作: ...

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

    1.  首先需要引入需要的jar包,如上图所示. 2. 编写需要定时调度的测试类: package com.jp.task; import java.util.Date; public class T ...

  4. Spring+Quartz集群环境下定时调度的解决方案

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  5. Spring定时服务QuartZ

    在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等. 我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作, ...

  6. [Quartz笔记]玩转定时调度

    简介 Quartz是什么? Quartz是一个特性丰富的.开源的作业调度框架.它可以集成到任何Java应用. 使用它,你可以非常轻松的实现定时任务的调度执行. Quartz的应用场景 场景1:提醒和告 ...

  7. 定时调度框架Quartz随笔

    最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少 ...

  8. 集群环境下定时调度的解决方案之Quartz集群

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  9. Spring4+Springmvc+quartz实现多线程动态定时调度

    scheduler定时调度系统是大多行业项目都需要的,传统的spring-job模式,个人感觉已经out了,因为存在很多的问题,特别是定时调度的追加.修改.删除等,需要修改xml,xml的配置生效无非 ...

随机推荐

  1. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:7.项目介绍之架构(1)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 <迷你微信>服务器端是使用Java语言,Mina框架编写的,一个良好的架构关系到后期迭代的方便程度 ...

  2. codevs 2620 战壕

    时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题目描述 Description Smart和Sarah正在玩一个即时战略游戏. Smart在他的基地附近建立了n个 ...

  3. pycharm tab换为4个空格

    Edit => find => replace 然后勾上 Regex,上一行输入 \t,下一行输入4个空格.

  4. 微信小程序 尺寸单位px与rpx之间的转换(入门篇)

    1.rpx:微信小程序中的尺寸单位rpx(responsive pixel):可以根据屏幕宽度进行自适应.规定屏幕宽度为750rpx. 微信官方建议视觉稿以iphone6为标准. 2.个人示例测试: ...

  5. iOS 制作表格 (数据源控制行,列数)

    记得去年面试的过程中,有一个面试官问我怎么制作表格.由于之前也没有做过,当时有点懵逼,今天想起来了,就用tableview制作了一个,望不要有人像我一样掉坑了, 直接上代码: // // ViewCo ...

  6. 为什么L1稀疏,L2平滑?

    使用机器学习方法解决实际问题时,我们通常要用L1或L2范数做正则化(regularization),从而限制权值大小,减少过拟合风险.特别是在使用梯度下降来做目标函数优化时,很常见的说法是,  L1正 ...

  7. Beyond Compare在Mac下永久试用

    转自 作者:忆如初 链接:https://www.jianshu.com/p/596b4463eacd 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. 亲测可用 一. ...

  8. MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别

    DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...

  9. oc字典

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  10. 开发中经常遇到的一些css样式问题

    1.经常会遇到子元素浮动了,父元素就会探索到一个合适的值现在值是0,就要清除浮动操 <div class="search clearfix"> <div clas ...