- 浏览: 736537 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lengzl:
请问,那个Node 是哪个包里面的类?
JAVA 二叉树的递归和非递归遍历 -
gongchuangsu:
总结的很好,感谢感谢
JAVA 二叉树的递归和非递归遍历 -
Caelebs:
666666666 居然是10年发的,难怪截屏自动保存的名字是 ...
截图工具 -
jijiqw:
是注解不是注释。。。
Spring @Transactional (一) -
letueo:
[b][b][b][b][b][b][b][b][b][b][ ...
Spring @Transactional (一)
一、java.util.Timer
在Java中有一个任务处理类java.util.Timer,非常方便于处理由时间触发的事件任务,只需建立一个继承java.util.TimerTask的子类,重载父类的run()方法实现具体的任务,然后调用Timer的public void schedule(TimerTask task, long delay, long period)方法实现任务的调度。
但是这种方法只能实现简单的任务调度,不能满足任务调度时间比较复杂的需求。比如希望系统在每周的工作日的8:00时向系统用户给出一个提示,这种方法实现起来就困难了,还有更为复杂的任务调度时间要求。
二、Quartz
OpenSymphony 的Quartz提供了一个比较完美的任务调度解决方案。
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
Quartz中有两个基本概念:作业和触发器。作业是能够调度的可执行任务,触发器提供了对作业的调度。
1、作业
实现 org.quartz.job 接口,实现接口方法 public void execute(JobExecutionContext context) throws JobExecutionException,在这个方法实现具体的作业任务。
代码例子:
java 代码
execute 方法接受一个 JobExecutionContext 对象作为参数。这个对象提供了作业实例的运行时上下文。它提供了对调度器和触发器的访问,这两者协作来启动作业以及作业的 JobDetail 对象的执行。Quartz 通过把作业的状态放在 JobDetail 对象中并让 JobDetail 构造函数启动一个作业的实例,分离了作业的执行和作业周围的状态。JobDetail 对象储存作业的侦听器、群组、数据映射、描述以及作业的其他属性。
2、触发器
触发器可以实现对任务执行的调度。Quartz 提供了几种不同的触发器,复杂程度各不相同。
简单触发器:
public void task() throws SchedulerException {
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = schedulerFactory.getScheduler();
// current time
long ctime = System.currentTimeMillis();
// Initiate JobDetail with job name, job group, and executable job class
JobDetail jobDetail =
new JobDetail("jobDetail-s1", "jobDetailGroup-s1", SimpleQuartzJob.class);
// Initiate SimpleTrigger with its name and group name
SimpleTrigger simpleTrigger =
new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
// set its start up time
simpleTrigger.setStartTime(new Date(ctime));
// set the interval, how often the job should run (10 seconds here)
simpleTrigger.setRepeatInterval(10000);
// set the number of execution of this job, set to 10 times.
// It will run 10 time and exhaust.
simpleTrigger.setRepeatCount(100);
// set the ending time of this job.
// We set it for 60 seconds from its startup time here
// Even if we set its repeat count to 10,
// this will stop its process after 6 repeats as it gets it endtime by then.
// simpleTrigger.setEndTime(new Date(ctime + 60000L));
// set priority of trigger. If not set, the default is 5
// simpleTrigger.setPriority(10);
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, simpleTrigger);
// start the scheduler
scheduler.start();
}
首先实例化一个 SchedulerFactory,获得调度器。创建 JobDetail 对象时,它的构造函数要接受一个 Job 作为参数。SimpleTrigger 是一个简单的触发器。在创建对象之后,设置几个基本属性以立即调度任务,然后每 10 秒重复一次,直到作业被执行 100 次。
Cron触发器
CronTrigger 支持比 SimpleTrigger 更具体强大的调度,实现起来却不是很复杂。CronTrigger基于 cron 表达式,支持类似日历的重复间隔更为复杂的调度时间上的要求。
Cron 表达式包括以下 7 个字段:
秒
分
小时
月内日期
月
周内日期
年(可选字段)
Cron 触发器利用一系列特殊字符,如下所示:
反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
所有这些定义看起来可能有些吓人,但是只要几分钟练习之后,cron 表达式就会显得十分简单。
下面的代码显示了 CronTrigger 的一个示例。请注意 SchedulerFactory、Scheduler 和 JobDetail 的实例化,与 SimpleTrigger 示例中的实例化是相同的。在这个示例中,只是修改了触发器。这里指定的 cron 表达式(“0/5 * * * * ?”)安排任务每 5 秒执行一次。
public void task() throws SchedulerException {
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = schedulerFactory.getScheduler();
// current time
long ctime = System.currentTimeMillis();
// Initiate JobDetail with job name, job group, and executable job class
JobDetail jobDetail =
new JobDetail("jobDetail2", "jobDetailGroup2", SimpleQuartzJob.class);
// Initiate CronTrigger with its name and group name
CronTrigger cronTrigger = new CronTrigger("cronTrigger", "triggerGroup2");
try {
// setup CronExpression
CronExpression cexp = new CronExpression("0/5 * * * * ?");
// Assign the CronExpression to CronTrigger
cronTrigger.setCronExpression(cexp);
} catch (Exception e) {
e.printStackTrace();
}
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, cronTrigger);
// start the scheduler
scheduler.start();
}
三、Spring + Quartz
spring对Java的Timer类和Quartz都提供了一个抽象层,使用我们可以更方便地使用它们。
1、spring与Timer的集成
首先是一个定时器任务
public class EmailReportTask extends TimerTask {
public EmailReportTask() {
}
public void run() {
courseService.sendCourseEnrollmentReport();
}
private CourseService courseService;
public void setCourseService(CourseService courseService) {
this.courseService = courseService;
}
}
spring配置文件中配置EmailReportTask
<bean id="reportTimerTask"
class="com.springinaction.training.schedule.EmailReportTask">
<property name="courseService">
<ref bean="courseService"/>
</property>
</bean>
调度定时器任务
xml 代码
<bean id="scheduledReportTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask">
<ref bean="reportTimerTask"/>
property>
<property name="period">
<value>86400000<value>
property>
<property name="delay">
<value>32000value>
property>
bean>
启动定时器
xml 代码
<bean class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledReportTask"/>
list>
property>
bean>
2、spring与Quartz的集成
创建一个工作
public class EmailReportJob extends QuartzJobBean {
public EmailReportJob() {
}
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
courseService.sendCourseEnrollmentReport();
}
private CourseService courseService;
public void setCourseService(CourseService courseService) {
this.courseService = courseService;
}
}
在spring配置文件的配置EmailReportJob
<bean id="reportJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.springinaction.training.schedule.EmailReportJobvalue>
property>
<property name="jobDataAsMap">
<map>
<entry key="courseService">
<ref bean="courseService"/>
entry>
map>
property>
bean>
调度工作
和quartz对应,Spirng提供了两个触发器SimpleTriggerBean和CronTriggerBean
使用SimpleTriggerBean触发器
<bean id="simpleReportTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="reportJob"/>
property>
<property name="startDelay">
<value>3600000value>
property>
<property name="repeatInterval">
<value>86400000value>
property>
bean>
使用CronTriggerBean触发器
<bean id="cronReportTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="reportJob"/>
property>
<property name="cronExpression">
<value>0 * * * * ?value>
property>
bean>
系统会在每分钟的0秒执行调度任务。
参考
http://www.ibm.com/developerworks/cn/java/j-quartz/
《Spring in Action》
http://www.iteye.com/topic/115666
在Java中有一个任务处理类java.util.Timer,非常方便于处理由时间触发的事件任务,只需建立一个继承java.util.TimerTask的子类,重载父类的run()方法实现具体的任务,然后调用Timer的public void schedule(TimerTask task, long delay, long period)方法实现任务的调度。
但是这种方法只能实现简单的任务调度,不能满足任务调度时间比较复杂的需求。比如希望系统在每周的工作日的8:00时向系统用户给出一个提示,这种方法实现起来就困难了,还有更为复杂的任务调度时间要求。
二、Quartz
OpenSymphony 的Quartz提供了一个比较完美的任务调度解决方案。
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
Quartz中有两个基本概念:作业和触发器。作业是能够调度的可执行任务,触发器提供了对作业的调度。
1、作业
实现 org.quartz.job 接口,实现接口方法 public void execute(JobExecutionContext context) throws JobExecutionException,在这个方法实现具体的作业任务。
代码例子:
java 代码
execute 方法接受一个 JobExecutionContext 对象作为参数。这个对象提供了作业实例的运行时上下文。它提供了对调度器和触发器的访问,这两者协作来启动作业以及作业的 JobDetail 对象的执行。Quartz 通过把作业的状态放在 JobDetail 对象中并让 JobDetail 构造函数启动一个作业的实例,分离了作业的执行和作业周围的状态。JobDetail 对象储存作业的侦听器、群组、数据映射、描述以及作业的其他属性。
2、触发器
触发器可以实现对任务执行的调度。Quartz 提供了几种不同的触发器,复杂程度各不相同。
简单触发器:
public void task() throws SchedulerException {
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = schedulerFactory.getScheduler();
// current time
long ctime = System.currentTimeMillis();
// Initiate JobDetail with job name, job group, and executable job class
JobDetail jobDetail =
new JobDetail("jobDetail-s1", "jobDetailGroup-s1", SimpleQuartzJob.class);
// Initiate SimpleTrigger with its name and group name
SimpleTrigger simpleTrigger =
new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
// set its start up time
simpleTrigger.setStartTime(new Date(ctime));
// set the interval, how often the job should run (10 seconds here)
simpleTrigger.setRepeatInterval(10000);
// set the number of execution of this job, set to 10 times.
// It will run 10 time and exhaust.
simpleTrigger.setRepeatCount(100);
// set the ending time of this job.
// We set it for 60 seconds from its startup time here
// Even if we set its repeat count to 10,
// this will stop its process after 6 repeats as it gets it endtime by then.
// simpleTrigger.setEndTime(new Date(ctime + 60000L));
// set priority of trigger. If not set, the default is 5
// simpleTrigger.setPriority(10);
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, simpleTrigger);
// start the scheduler
scheduler.start();
}
首先实例化一个 SchedulerFactory,获得调度器。创建 JobDetail 对象时,它的构造函数要接受一个 Job 作为参数。SimpleTrigger 是一个简单的触发器。在创建对象之后,设置几个基本属性以立即调度任务,然后每 10 秒重复一次,直到作业被执行 100 次。
Cron触发器
CronTrigger 支持比 SimpleTrigger 更具体强大的调度,实现起来却不是很复杂。CronTrigger基于 cron 表达式,支持类似日历的重复间隔更为复杂的调度时间上的要求。
Cron 表达式包括以下 7 个字段:
秒
分
小时
月内日期
月
周内日期
年(可选字段)
Cron 触发器利用一系列特殊字符,如下所示:
反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
所有这些定义看起来可能有些吓人,但是只要几分钟练习之后,cron 表达式就会显得十分简单。
下面的代码显示了 CronTrigger 的一个示例。请注意 SchedulerFactory、Scheduler 和 JobDetail 的实例化,与 SimpleTrigger 示例中的实例化是相同的。在这个示例中,只是修改了触发器。这里指定的 cron 表达式(“0/5 * * * * ?”)安排任务每 5 秒执行一次。
public void task() throws SchedulerException {
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = schedulerFactory.getScheduler();
// current time
long ctime = System.currentTimeMillis();
// Initiate JobDetail with job name, job group, and executable job class
JobDetail jobDetail =
new JobDetail("jobDetail2", "jobDetailGroup2", SimpleQuartzJob.class);
// Initiate CronTrigger with its name and group name
CronTrigger cronTrigger = new CronTrigger("cronTrigger", "triggerGroup2");
try {
// setup CronExpression
CronExpression cexp = new CronExpression("0/5 * * * * ?");
// Assign the CronExpression to CronTrigger
cronTrigger.setCronExpression(cexp);
} catch (Exception e) {
e.printStackTrace();
}
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, cronTrigger);
// start the scheduler
scheduler.start();
}
三、Spring + Quartz
spring对Java的Timer类和Quartz都提供了一个抽象层,使用我们可以更方便地使用它们。
1、spring与Timer的集成
首先是一个定时器任务
public class EmailReportTask extends TimerTask {
public EmailReportTask() {
}
public void run() {
courseService.sendCourseEnrollmentReport();
}
private CourseService courseService;
public void setCourseService(CourseService courseService) {
this.courseService = courseService;
}
}
spring配置文件中配置EmailReportTask
<bean id="reportTimerTask"
class="com.springinaction.training.schedule.EmailReportTask">
<property name="courseService">
<ref bean="courseService"/>
</property>
</bean>
调度定时器任务
xml 代码
<bean id="scheduledReportTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask">
<ref bean="reportTimerTask"/>
property>
<property name="period">
<value>86400000<value>
property>
<property name="delay">
<value>32000value>
property>
bean>
启动定时器
xml 代码
<bean class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledReportTask"/>
list>
property>
bean>
2、spring与Quartz的集成
创建一个工作
public class EmailReportJob extends QuartzJobBean {
public EmailReportJob() {
}
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
courseService.sendCourseEnrollmentReport();
}
private CourseService courseService;
public void setCourseService(CourseService courseService) {
this.courseService = courseService;
}
}
在spring配置文件的配置EmailReportJob
<bean id="reportJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.springinaction.training.schedule.EmailReportJobvalue>
property>
<property name="jobDataAsMap">
<map>
<entry key="courseService">
<ref bean="courseService"/>
entry>
map>
property>
bean>
调度工作
和quartz对应,Spirng提供了两个触发器SimpleTriggerBean和CronTriggerBean
使用SimpleTriggerBean触发器
<bean id="simpleReportTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="reportJob"/>
property>
<property name="startDelay">
<value>3600000value>
property>
<property name="repeatInterval">
<value>86400000value>
property>
bean>
使用CronTriggerBean触发器
<bean id="cronReportTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="reportJob"/>
property>
<property name="cronExpression">
<value>0 * * * * ?value>
property>
bean>
系统会在每分钟的0秒执行调度任务。
参考
http://www.ibm.com/developerworks/cn/java/j-quartz/
《Spring in Action》
http://www.iteye.com/topic/115666
发表评论
-
Servlet上传文件
2012-02-07 23:58 1452准备工作:要到http://commons.apache.or ... -
成为Java高手需要达到的25个学习目标--经典
2012-01-29 16:07 1308本文将告诉你学习Java需 ... -
Java 产生不重复的随机数
2011-06-22 23:32 2328int numberCount = 6; ... -
Date类学习总结(Calendar Date 字符串 相互转换 格式化)
2011-06-20 16:12 1632Date类学习总结 1.计算某一月份的最大天数 ... -
jsp中的cookie用法小实例
2011-06-20 00:13 2463这个小实例有三个页面 index.jsp页面内容如下: Y ... -
JS实现简单的增删改查
2011-06-19 23:41 12922<%@ page language="ja ... -
Jsp 动态显示系统时间
2011-06-19 23:24 4863<%@ page language=" ... -
java 动态显示时间
2011-06-19 23:13 4022import java.util.Date; p ... -
js 动态显示时间
2011-06-19 22:53 1798<%@ page language=" ... -
HTML 显示系统时间
2011-06-19 22:13 7842代码1:(显示静态时间) <script type=& ... -
JavaScript 动态显示系统时间
2011-06-19 19:36 2047JavaScript 动态显示系统时间 <html ... -
两例JavaScript 获取当前系统日期和时间
2011-06-19 19:20 1217两例JavaScript 获取当前系统日期和时间 QUOTE ... -
java五种JSP页面跳转方法详解
2011-06-19 17:08 14381. RequestDispatcher.forward() ... -
Java Object方法
2011-06-19 16:47 1272package com.abin.test.connectio ... -
Java 数组,List,Itarator循环
2011-06-19 16:01 2264package com.abin.test.connect ... -
JAVA DBClass操作数据库,这样算不算单列模式
2011-06-19 14:53 1212到底怎样才算单列模式,单列模式事什么概念 package c ... -
Oracle日期函数集锦
2011-06-16 20:55 868Oracle日期函数集锦(一) 一、 常用日期数据格式 1 ... -
java 页面传送数组
2011-06-15 14:56 25521.可以通过嵌入java代码调用session或者reques ... -
java Calendar当前时间
2011-06-14 13:40 1617Calendar c = Calendar.getIn ... -
java Calendar日期相减问题
2011-06-14 13:18 8599两个日期相减,必须是Date型变量使用其getTime()后相 ...
相关推荐
实现了spring配置比较流行的任务调度操作,java timer 和 quartz俩种方式 并且有注释描述。
Java关于时间调度的几种实现方(Timer TimerTask Quartz Spring)
如quartz、jcrontab、JobServer等,在这里我介绍一种比较简单的调度,没有quartz那么复杂,目的在于实用就行,这种调度就是spring提供的调度功能,该调度功能基于quartz+AOP进行实现,我们开始一个例子吧。
Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业...
关于spring调度的例子;| 两种方法:quartz 和 timer;| 适合学习;| 已经调试通过
Quartz 是什么,大概不需多加说明,简单讲就是一个纯 Java 实现的作业调度工具,相当于数据库中的 Job、Windows 的计划 任务、 Unix/Linux 下的 Cron ,但 Quartz 可以把排程控制的更精细。也许大多数人听说 Quartz ...
这个注解主要基于Java的内置Timer类以及Quartz等定时任务库,但在Spring Boot中,它提供了更加简洁和易用的方式来实现定时任务。 # 实现原理 @Scheduled注解的实现原理主要依赖于Spring框架的任务调度机制。当...
java中用timer调度,像spring提供的Quartz一样,这里是自己调用java API中的timer写的,忘下载者给与评价
第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。 第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。 第15章:对...
这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。 UI方面的用来与模板(Templating)引擎如 Velocity、FreeMarker、...
Spring排程(Scheduling)技术 1、排程(Scheduling)原理 2、什么是Timer 1)、执行一次 2)、周期执行 3、在spring中使用Timer 4、在spring中使用Quartz调度器
并非应用系统中发生的所有事情都是由用户的动作引起的。...在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz来执行调度任务。下面以给商丘做的接口集抄900到中间库的日冻结数据传输为例:
7.3.1 使用Java Timer调度任务 7.3.2 使用Quartz调度器 7.3.3 按调度计划调用方法 7.4 使用JMS发送消息 7.4.1 使用JMS模板发送消息 7.4.2 消费消息 7.4.3 转换消息 7.5 小结 第三...
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等...使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的集成,下面介绍它们集成方法和Cron表达式的详细介绍。
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...
11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口 ...
11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口...
于是想起了 Spring 框架整合了一个作业调度框架 Quartz,其实一直没用过它,而且这回是要脱离 Spring 框架来使用 Quartz。于是就到网上找来 Quartz 相关的资料,介绍使用倒也不含糊,但缺乏系统与深度,继而找到的...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...
Spring定时器在SSH框架中的应用,Java的Timer类和OpenSymphony的Quartz来执行调度任务