Quartz在Spring中如何动态配置时间文档格式.docx
- 文档编号:8329062
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:20
- 大小:66.81KB
Quartz在Spring中如何动态配置时间文档格式.docx
《Quartz在Spring中如何动态配置时间文档格式.docx》由会员分享,可在线阅读,更多相关《Quartz在Spring中如何动态配置时间文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
bean
id="
schedulerTrigger"
org.springframework.scheduling.quartz.SchedulerFactoryBean"
triggers"
list>
refbean="
/>
/list>
/property>
这种配置就是对quartz的一种简单的使用了,调度任务会在spring启动的时候加载到内存中,按照cronTrigger中定义的cronExpression定义的时间按时触发调度任务。
但是这是quartz使用“内存”方式的一种配置,也比较常见,当然对于不使用spring的项目,也可以单独整合quartz。
方法也比较简单,可以从quartz的doc中找到配置方式,或者看一下《QuartzJobSchedulingFramework》。
但是对于想持久化调度任务的状态,并且灵活调整调度时间的方式来说,上面的内存方式就不能满足要求了,正如本文开始我遇到的情况,需要采用数据库方式集成Quartz,这部分集成其实在《QuartzJobSchedulingFramework》中也有较为详细的介绍,当然doc文档中也有,但是缺乏和spring集成的实例。
一、需要构建Quartz数据库表,建表脚本在Quartz发行包的docs\dbTables目录,里面有各种数据库建表脚本,我采用的Quartz1.6.5版本,总共12张表,不同版本,表个数可能不同。
我用mysql数据库,执行了Quartz发行包的docs\dbTables\tables_mysql_innodb.sql建表。
二、建立javaproject,完成后目录如下
project,完成后目录如下
三、配置数据库连接池
配置jdbc.properties文件
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:
mysql:
//localhost:
3306/quartz?
useUnicode=true&
characterEncoding=UTF-8&
autoReconnect=true
jdbc.username=root
jdbc.password=kfs
cpool.checkoutTimeout=5000
cpool.minPoolSize=10
cpool.maxPoolSize=25
cpool.maxIdleTime=7200
cpool.acquireIncrement=5
cpool.autoCommitOnClose=true
配置applicationContext.xml文件
?
xmlversion="
1.0"
encoding="
UTF-8"
beansxmlns="
http:
//www.springframework.org/schema/beans"
xmlns:
xsi="
//www.w3.org/2001/XMLSchema-instance"
aop="
//www.springframework.org/schema/aop"
tx="
//www.springframework.org/schema/tx"
context="
//www.springframework.org/schema/context"
jee="
//www.springframework.org/schema/jee"
xsi:
schemaLocation="
http:
//www.springframework.org/schema/contexthttp:
//www.springframework.org/schema/context/spring-context-2.5.xsd
//www.springframework.org/schema/beanshttp:
//www.springframework.org/schema/beans/spring-beans-2.5.xsd
//www.springframework.org/schema/txhttp:
//www.springframework.org/schema/tx/spring-tx-2.5.xsd
//www.springframework.org/schema/aophttp:
//www.springframework.org/schema/aop/spring-aop-2.5.xsd
//www.springframework.org/schema/jee
//www.springframework.org/schema/jee/spring-jee-2.5.xsd"
>
<
context:
component-scanbase-package="
com.sundoctor"
!
--属性文件读入-->
propertyConfigurer"
org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
locations"
value>
classpath:
jdbc.properties<
/value>
--数据源定义,使用c3p0连接池-->
dataSource"
com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="
close"
driverClass"
${jdbc.driverClassName}"
jdbcUrl"
${jdbc.url}"
user"
${jdbc.username}"
password"
${jdbc.password}"
initialPoolSize"
${cpool.minPoolSize}"
minPoolSize"
maxPoolSize"
${cpool.maxPoolSize}"
acquireIncrement"
${cpool.acquireIncrement}"
maxIdleTime"
${cpool.maxIdleTime}"
/beans>
这里只是配置了数据连接池,我使用c3p0连接池,还没有涉及到Quartx有关配置,下面且听我慢慢道来。
四、实现动态定时任务
什么是动态定时任务:
是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。
这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时,发现
schedulerJobDetail"
0/10****?
中cronExpression是关键,如果可以动态设置cronExpression的值,就可以顺利解决问题了。
这样我们就不能直接使用org.springframework.scheduling.quartz.CronTriggerBean,需要自己实现一个动态调度服务类,在其中构建CronTrigger或SimpleTrigger,动态配置时间。
动态调度服务接口:
Java代码
package
com.sundoctor.quartz.service;
import
java.util.Date;
org.quartz.CronExpression;
public
interface
SchedulerService
{
void
schedule(String
cronExpression);
name,String
schedule(CronExpression
name,CronExpression
schedule(Date
startTime);
name,Date
startTime,Date
endTime);
endTime,int
repeatCount);
repeatCount,long
repeatInterval)
;
repeatInterval);
}
packagecom.sundoctor.quartz.service;
importjava.util.Date;
importorg.quartz.CronExpression;
publicinterfaceSchedulerService{voidschedule(StringcronExpression);
voidschedule(Stringname,StringcronExpression);
voidschedule(CronExpressioncronExpression);
voidschedule(Stringname,CronExpressioncronExpression);
voidschedule(DatestartTime);
voidschedule(Stringname,DatestartTime);
voidschedule(DatestartTime,DateendTime);
voidschedule(Stringname,DatestartTime,DateendTime);
voidschedule(DatestartTime,DateendTime,intrepeatCount);
voidschedule(Stringname,DatestartTime,DateendTime,intrepeatCount);
voidschedule(DatestartTime,DateendTime,intrepeatCount,longrepeatInterval);
voidschedule(Stringname,DatestartTime,DateendTime,intrepeatCount,longrepeatInterval);
}
动态调度服务实现类:
java.text.ParseException;
java.util.UUID;
org.quartz.CronTrigger;
org.quartz.JobDetail;
org.quartz.Scheduler;
org.quartz.SchedulerException;
org.quartz.SimpleTrigger;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.beans.factory.annotation.Qualifier;
org.springframework.stereotype.Service;
@Service("
schedulerService"
)
class
SchedulerServiceImpl
implements
private
Scheduler
scheduler;
JobDetail
jobDetail;
@Autowired
setJobDetail(@Qualifier("
)
jobDetail)
this.jobDetail
=
}
setScheduler(@Qualifier("
quartzScheduler"
scheduler)
this.scheduler
@Override
cronExpression)
schedule(null,
name,
String
try
schedule(name,
new
Cronexpression_r(cronExpression));
catch
(ParseException
e)
throw
RuntimeException(e);
CronExpression
if
(name
==
null
||
name.trim().equals("
"
))
name
UUID.randomUUID().toString();
scheduler.addJob(jobDetail,
true);
CronTrigger
cronTrigger
CronTrigger(name,
Scheduler.DEFAULT_GROUP,
jobDetail.getName(),
Scheduler.DEFAULT_GROUP);
cronTrigger.setCronexpression_r(cronExpression);
scheduler.scheduleJob(cronTrigger);
scheduler.rescheduleJob(name,
cronTrigger);
(SchedulerException
startTime)
schedule(startTime,
null);
Date
startTime,
endTime)
endTime,
0);
int
repeatCount)
0,
0L);
repeatCount,
long
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Quartz Spring 如何 动态 配置 时间