在spring中你有时候需要在每天或者指定的一个时候进行一系列的操作。这个时候我们的spring为我们提供了一个很好的包来解决这个问题,你这是需要写一个Class文件,在文件中定义你要执行操作的函数你就可以通过配置来达到定时操作了。
1)需要的jar包为:quartz.jar包,将他加到你工程的classpath中去。
2)在applicationContext中配置你的定时发送操作。
(1)
下边定义的这个testQuarz就是我们要将我们的定时操作函数TestDoIt()所要放置的地方。就是说TestDoIt()这个方法是
TestQuarz这个类中的一个函数。这里声明一下这个bean。就是将这个bean注入到我们的容器中。这个时候我们可以在这个bean中引用容器中
其他的bean进行数据库操作。是不是很酷?
代码:
|
<bean id="testQuarz" class="cn.demo.test.util.TestQuarz"/> |
(2)下边的这个bean是我们定义要使用哪个bean中的哪个方法作为我们要定时执行的任务。这里定义了我们要使用testQuarz这个bean中的TestDoIt()这个函数作为我们要定时执行的任务。
代码:
|
<bean id="quartzDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="testQuarz"/>
</property>
<property name="targetMethod">
<value>TestDoIt</value>
</property>
</bean> |
(3)这是一个触发器的bean的设置,在这里我们设置了我们要触发的jobDetail是哪个。这里我们定义了要触发的jobDetail是quartzDetail,并且我们还定义了触发的时间。
代码:
|
<bean id="quartzTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="quartzDetail"/>
</property>
<property name="cronExpression"> |
<!-- 每天凌晨1点7分18妙运行定时任务,时间的设置请看下边
更多的配置例子请查看:http://wiki.opensymphony.com/display/QRTZ1/CronTriggers+Tutorial
-->
代码:
|
<value>18 7 1 * * ?</value>
</property>
</bean> |
<!-- 一定要把autowire设置为no,否则它能感知出dataSourse并设置里面的dataSourse的属性-->
(4)
下边的是我们管理这些触发器的总设置,他管理我们我们的触发器列表。据说他的内部是自己建立了自己的数据库来存放自己的临时表,因为我们在我们的配置文件
中自动的配置了dataSource这个bean,我们的每一个bean都会在使用数据库的时候找到他,但是如果我们下边的这个管理bean知道的话就会
把他当成自己的临时数据库,然后就会出错。所以我们需要将下边的数据库感知设置成否定。这样就不影响他内部实现了。我们可以在下边的bean的list中
放置多个触发器。
代码:
|
<bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="quartzTrigger"/>
</list>
</property>
</bean> |
到此,我们的定时发送设置就完成了,具体的还要看看spring的refence比较好,那些比较细的细节东东我没有涉及到。
由于项目需要学习了一下定时
触发的功能。
Spring
提供了支持时序调度,对于Quartz Scheduler和Timer两者存在一个方便的类允许你调用目标对象(类似于通常的MethodInvokingFactoryBeans)上的某个方法。
可以灵活定时
调用,bean中的方法。
主要用到 org.spring
framework.scheduling.quartz.SimpleTriggerBean 类
<bean id="topDailyTrigger" class="org.spring
framework.scheduling.quartz.SimpleTriggerBean">
<!-- see the example of method invoking job above -->
<property name="jobDetail" ref="jobDetail" />
<!-- 启动后5秒开始 计时 -->
<property name="startDelay" value="5000" />
<!-- repeat every 一个小时 seconds -->
<property name="repeatInterval" value="3600000" />
</bean>
一个任务 指定执行的bean 和对应的方法
<bean id="jobDetail" class="org.spring
framework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="DailyEntryManager" />
<property name="targetMethod" value="excut" />
<property name="concurrent" value="false" />
</bean>
这个是要执行的bean 声明
<bean id="DailyEntryManager" class="net.bokee.dailymodule.service.DailyEntryManagerImpl">
</bean>
最后不要忘记这个配置
<bean class="org.spring
framework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="topDailyTrigger" />
</list>
</property>
</bean>
说明:org.spring
framework.scheduling.quartz.SchedulerFactoryBean这是一个spring
的工厂bean,在他的triggers属性列表中加入刚才定义的触发器,这里可以定义多个触发器(list嘛)。
下面学习一下 定时
表达式
定时批处理作业是J2EE企业应用里很重要的一环,用来在晚间进行财务挂账,数据转存,新闻联播等等操作。
而在Spring里,已经很好的集成了Quartz,简单到像配cron一样,在xml文件里面配一下时间就可以自动执行,不需要写一行代码。Spring对Quartz大刀阔斧的简化堪称范例,Quartz项目组也许可以学习一下。
<bean id="methodInvokingJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject"><ref bean="financeDAO"/></property>
<property name="targetMethod"><value>confirmOrder</value></property>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="methodInvokingJobDetail"/>
</property>
<property name="cronExpression">
<value>0 0 6,12,20 * * ?</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list><ref local="cronTrigger"/></list>
</property>
</bean>
上面这段配置文件规定了在早上6点和晚上8点执行financeDAO对象的confirmOrder()方法.
附:cronExpression配置说明
字段
允许值
允许的特殊字符
秒
|
|
0-59
|
|
, - * /
|
分
|
|
0-59
|
|
, - * /
|
小时
|
|
0-23
|
|
, - * /
|
日期
|
|
1-31
|
|
, - * ? / L W C
|
月份
|
|
1-12 或者 JAN-DEC
|
|
, - * /
|
星期
|
|
1-7 或者 SUN-SAT
|
|
, - * ? / L C #
|
年(可选)
|
|
留空, 1970-2099
|
|
, - * /
|
分享到:
相关推荐
自己写的Quartz+Sping定时触发器例子,包含全部jar包,可直接运行。注释完整,适合初学者学习。
spring+quartz定时小例子,架包+文档 我自己整理的
spring之quartz例子,与oracle整合,不过spring中的MethodInvokingJobDetailFactoryBean方法在存数据库时序列化有bug,在本例子中,使用了修复后的MethodInvokingJobDetailFactoryBean方法,避免了因序列化而报错。
一个spring quartz的定时任务,放到tomcat下就可以看到后台打印了
一个很简单的spring定时任务的例子,一看就会。。。。
Spring的任务调度@Scheduled注解——task:scheduler和task:executor的解析,做了一些测试说明了各个参数的作用
Spring2.5+Quartz定时任务简单例子web工程 myeclipse 项目开发的,可直接导入运行
spring定时非常详细,有例子,超具体,需要的下载
NULL 博文链接:https://huanyue.iteye.com/blog/512748
spring3.2.4+quartz2.2.0 定时调度例子,能正常运行的程序
quartz 在spring中使用服务定时执行的例子,及全部的jar包
这是个人练习的spring配置定时任务方面的例子,备忘用,不建议下载
spring3 配置quartz定时任务的使用。一个小例子。可直接运行Test.java。就可以启动定时任务。每10秒钟执行一次,可以根据自己配置。
spring定时器例子,该例子使用spring+Quartz进行结合使用的例子
举个例子吧 可对仓库库存状况定时检查,并执行删除等其他操作
- chapter1:[基本项目构建(可作为工程脚手架),引入...由于Spring Cloud偏宏观架构,Spring Boot偏微观细节,内容上越来越多,为了两部分内容不互相干扰,所以迁移Spring Cloud内容到:[SpringCloud-Learning项目]...
Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务,原http://blog.csdn.net/phantomes/article/details/37880551博客的源码例子
spring3 配置quartz定时任务的使用。一个小例子。可直接运行Test.java。就可以启动定时任务。
spring-quartz简单实例 简单的quartz定时任务实例代码
spring+quartz实现动态设置定时任务,自己的例子+心得+sql语句