`

Spring 定时任务 Quartz

阅读更多

近期项目中用到定时任务去处理报表生成功能:

简单记录一下以后在完善~~~后面附带所用到的jar包!

 

业务逻辑的Java Code:

写道
/**
* <b>项目名:</b>系统项目名称<br/>
* <b>包名:</b>com.members.system.timer.handler<br/>
* <b>文件名:</b>BusinessReport.java<br/>
* <b>版本信息:</b><br/>
* <b>日期:</b>Mar 2, 2011-10:22:58 AM<br/>
* <b>Copyright (c)</b> 2011XX公司-版权所有<br/>
*
*/
package com.members.system.timer.handler;

import java.util.Date;

import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
* @author 016540
*
*/
public class BusinessReport implements Job {
Logger logger =Logger.getLogger(BusinessReport.class);

public void perform(){ //执行报表统计入口函数
//业务逻辑
System.out.println("开始执行报表的业务逻辑了----现在的时间是--"+new Date());

}


/* (non-Javadoc)
* @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
*/
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
logger.info("开始执行任务:Date:"+ new Date());
perform();
logger.info("结束执行任务:Date:"+ new Date());

}

}

 

Spring的配置文件:

写道
<?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的Schema信息 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<!-- 注册业务Bean -->
<bean id="businessReport" class="com.members.system.timer.handler.BusinessReport" />

<!-- 注册到quartz里面 -->
<bean name="reportTask"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="businessReport" />
</bean>

<!-- 触发器 -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">

<!-- 指向我们的任务 -->
<property name="jobDetail" ref="reportTask" />

<!-- 每天下午16点50分到55分,每分钟运行一次 -->
<property name="cronExpression" value="0 0-1 11,12 * * ?" />
</bean>

<!-- 调度器 -->
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 触发器列表 -->
<ref bean="cronTrigger" />
</list>
</property>
<property name="configLocation" value="classpath:/properties/quartz.properties" />
</bean>

</beans>

 

 

Quartz属性文件 写道
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

#============================================================================
# Configure ThreadPool
#============================================================================
#org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#============================================================================
# Configure JobStore
#============================================================================
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.misfireThreshold = 60000
#org.quartz.jobStore.useProperties = false
#org.quartz.jobStore.tablePrefix = QRTZ_
#org.quartz.jobStore.dataSource = myDS

#org.quartz.jobStore.isClustered = true
#org.quartz.jobStore.clusterCheckinInterval = 15000

#============================================================================
# Configure DataSource
#============================================================================
#org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
#org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost/test
#org.quartz.dataSource.myDS.user = root
#org.quartz.dataSource.myDS.password = root
#org.quartz.dataSource.myDS.maxConnections = 10


 

关于cronExpression的介绍:

关于触发器时间表达式的一些例子:

对于复杂触发器的cronExpression,可借鉴linux的cron。

 
字段  允许值                       允许的特殊字符
秒    0-59                         , - * /
分    0-59                         , - * /
小时  0-23                         , - * /
日期  1-31                         , - * ? / L W C
月份  1-12 或者 JAN-DEC            , - * /
星期  1-7 或者 SUN-SAT             , - * ? / L C #
年(可选)  留空, 1970-2099        , - * /

表达式意义
"0 0 12 * * ?"          每天中午12点触发
"0 15 10 ? * *"         每天上午10:15触发
"0 15 10 * * ?"         每天上午10:15触发
"0 15 10 * * ? *"       每天上午10:15触发
"0 15 10 * * ? 2005"    2005年的每天上午10:15触发
"0 * 14 * * ?"          在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?"        在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?"     在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?"        在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED"    每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI"   周一至周五的上午10:15触发
"0 15 10 15 * ?"        每月15日上午10:15触发
"0 15 10 L * ?"         每月最后一日的上午10:15触发
"0 15 10 ? * 6L"        每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005"  2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3"       每月的第三个星期五上午10:15触发 
每天早上6点

0 6 * * *

每两个小时

0 */2 * * *
晚上11点到早上8点之间每两个小时,早上八点

0 23-7/2,8 * * *

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3
1月1日早上4点

0 4 1 1 *

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics