快捷搜索:

浅谈spring时序调度Quartz

近期接到一个开拓义务,营业方面不再胪陈,要求天天准时履行一段利用法度榜样用来同步俩个数据库。

恰恰近期不停在用spring做相关开拓,考试测验了下Quartz,感到不错,今朝也正在进修中。。。

Quartz应用Trigger、Job以及JobDetail等工具来进行各类类型的义务调整,Spring对其供给了很好的支持。

建立一个时序调整法度榜样的历程如下: 1) 设置设置设备摆设摆设Job及JobDetail Bean,定义履行某个类里的特定措施; 2) 设置设置设备摆设摆设Trigger Bean,定义触发JobDetail的光阴规律; 3) 设置设置设备摆设摆设SchedulerFactoryBean认真调整实际的Trigger;时序调整的运行模式有两种: 1) 一种是在某个特准光阴自动运行,例如天天早晨2点备份数据、每月初1号统计上月的数据等,我们称之为准时调整;

2)另一种是在办事启动一段光阴后开始运行,再每隔一段光阴再次运行,如系统监控法度榜样每个10分钟就要测试一下数据库是否连接正常,我们称之为重复调整;

下面举出两个简单的典型,具体道理和设置设置设备摆设摆设措施请参考 Spring 官方文档和法度榜样典型的ApplicationContext-quartz.xml 文件;

一、准时调整参数设置设置设备摆设摆设是在天天的14:35的光阴自动履行CronSimpleJob.java 类中的 executeInternal()措施,在系统节制台上输 出日志内容。

ApplicationContext-quartz.xml内容:

view plaincopy to clipboardprint?

!--准时简单JobDetail-->

CronSimpleJob.java文件内容:

view plaincopy to clipboardprint?

package test.quartz;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.JobExecutionContext;

import org.springframework.scheduling.quartz.QuartzJobBean;

public class CronSimpleJob extends QuartzJobBean

{

private final Log logger = LogFactory.getLog(getClass());

protected void executeInternal(JobExecutionContext context)

{

logger.warn(getClass().getName() + " out it!");

}

}

package test.quartz;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.JobExecutionContext;

import org.springframework.scheduling.quartz.QuartzJobBean;

public class CronSimpleJob extends QuartzJobBean

{

private final Log logger = LogFactory.getLog(getClass());

protected void executeInternal(JobExecutionContext context)

{

logger.warn(getClass().getName() + " out it!");

}

}

二、重复调整:view plaincopy to clipboardprint?

在办事器启动10000毫秒即10秒钟后,调整法度榜样首次履行,今后每隔60000毫秒即1分钟再次履行,

在办事器启动10000毫秒即10秒钟后,调整法度榜样首次履行,今后每隔60000毫秒即1分钟再次履行,view plaincopy to clipboardprint?

自动履行RepeatMethodJob.java类中的testRepeatMethod()措施,在系统节制台上输出日志内容。

自动履行RepeatMethodJob.java类中的testRepeatMethod()措施,在系统节制台上输出日志内容。view plaincopy to clipboardprint?

对付相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了,

对付相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了,view plaincopy to clipboardprint?

指定concurrent设为false,多个job不会并发履行,第二个job将不会在第一个job完成之前开始。

指定concurrent设为false,多个job不会并发履行,第二个job将不会在第一个job完成之前开始。view plaincopy to clipboardprint?

ApplicationContext-quartz.xml内容:

ApplicationContext-quartz.xml内容:

view plaincopy to clipboardprint?

view plaincopy to clipboardprint?

RepeatMethodJob.java文件内容:

RepeatMethodJob.java文件内容:view plaincopy to clipboardprint?

package test.quartz;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public class RepeatMethodJob

{

private final Log logger = LogFactory.getLog(getClass());

public void testRepeatMethod(){

logger.warn(getClass().getName()+"out it!");

}

}

关于cronExpression:

view plaincopy to clipboardprint?package test.quartz;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class RepeatMethodJob{private final Log logger = LogFactory.getLog(getClass());public void testRepeatMethod(){logger.warn(getClass().getName()+"out it!");}}package test.quartz;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public class RepeatMethodJob

{

private final Log logger = LogFactory.getLog(getClass());

public void testRepeatMethod(){

logger.warn(getClass().getName()+"out it!");

}

}

view plaincopy to clipboardprint?

view plaincopy to clipboardprint?

view plaincopy to clipboardprint?关于cronExpression:关于cronExpression:

view plaincopy to clipboardprint?

view plaincopy to clipboardprint?

view plaincopy to clipboardprint?

view plaincopy to clipboardprint?

关于Quartz详解,可参考http://www.blogjava.net/Unmi/archive/2008/05/25/202700.html">http://www.blogjava.net/Unmi/archive/2008/05/25/202700.html写的对照深入。

您可能还会对下面的文章感兴趣: