scheduler定时调度系统是大多行业项目都需要的,传统的spring-job模式,个人感觉已经out了,因为存在很多的问题,特别是定时调度的追加、修改、删除等,需要修改xml,xml的配置生效无非是热部署灰度发布方案或者直接停止、重启服务器,完全不能做到自动启动、修复方式。
提醒:可以对应用进行集群部署,在对定时调度配置时可以使用集群方式或者单边配置应用方式,今天讲解的是使用spring4+scheduler实现定时调度,
1. 在项目的pom.xml文件中引入quartz的jar包,如下:Java代码
lt;dependency>
org.quartz-scheduler
quartz
1.8.5
lt;/dependency>
[java]view plaincopyprint?
lt;dependency>
org.quartz-scheduler
quartz
1.8.5
lt;/dependency>
org.quartz-scheduler
quartz
1.8.5
2. 定义quartz的配置文件spring-context-quartz.xml:
Java代码
xmlns:context="/schema/context"xsi:schemaLocation="
/schema/beans/schema/beans/spring-beans-4.0.xsd
/schema/context/schema/context/spring-context-4.0.xsd"
default-lazy-init="false">
[java]view plaincopyprint?
xmlns:context="/schema/context"xsi:schemaLocation="
/schema/beans/schema/beans/spring-beans-4.0.xsd
/schema/context/schema/context/spring-context-4.0.xsd"
default-lazy-init="false">
xmlns:context="/schema/context" xsi:schemaLocation="
/schema/beans /schema/beans/spring-beans-4.0.xsd
/schema/context /schema/context/spring-context-4.0.xsd"
default-lazy-init="false">
3. 在项目的web.xml文件中引入spring-context-quartz.xml配置文件
Java代码
classpath*:spring-context-quartz.xml
[java]view plaincopyprint?
classpath*:spring-context-quartz.xml
classpath*:spring-context-quartz.xml
4. 定义job实体对象
Java代码
publicclassJob{
privatestaticfinallongserialVersionUID=1L;
/**
*任务执行周期cron表达式
*/
publicstaticintEXECYCLE_CRON=2;
/**
*任务执行周期自定义
*/
publicstaticintEXECYCLE_DEFINE=1;
/**
*执行周期-分钟
*/
publicstaticintEXECYCLE_MINUTE=1;
/**
*执行周期-小时
*/
publicstaticintEXECYCLE_HOUR=2;
/**
*执行周期-日
*/
publicstaticintEXECYCLE_DAY=3;
/**
*执行周期-月
*/
publicstaticintEXECYCLE_WEEK=4;
/**
*执行周期-月
*/
publicstaticintEXECYCLE_MONTH=5;
privateStringjobType;//任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)
privateStringjobName;//任务名称
privateStringjobClass;//任务类
privateStringexecycle;//执行周期分类(1非表达式2cron表达式)
privateStringdayOfMonth;//每月的哪天
privateStringdayOfWeek;//周几
privateStringhour;//小时
privateStringminute;//分钟
privateStringintervalHour;//间隔小时
privateStringintervalMinute;//间隔分钟
privateStringjobIntervalUnit;//1分钟、2小时、3日、4周、5月
privateStringcronExpression;//规则表达式
privateStringisEnable;//是否启用
publicJob(){
super();
}
publicJob(Stringid){
super(id);
}
@Length(min=1,max=1,message="任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)长度必须介于1和1之间")
publicStringgetJobType(){
returnjobType;
}
publicvoidsetJobType(StringjobType){
this.jobType=jobType;
}
@Length(min=1,max=255,message="任务名称长度必须介于1和255之间")
publicStringgetJobName(){
returnjobName;
}
publicvoidsetJobName(StringjobName){
this.jobName=jobName;
}
@Length(min=1,max=255,message="任务类长度必须介于1和255之间")
publicStringgetJobClass(){
returnjobClass;
}
publicvoidsetJobClass(StringjobClass){
this.jobClass=jobClass;
}
@Length(min=1,max=1,message="执行周期分类(1非表达式2cron表达式)长度必须介于1和1之间")
publicStringgetExecycle(){
returnexecycle;
}
publicvoidsetExecycle(Stringexecycle){
this.execycle=execycle;
}
@Length(min=0,max=11,message="每月的哪天长度必须介于0和11之间")
publicStringgetDayOfMonth(){
returndayOfMonth;
}
publicvoidsetDayOfMonth(StringdayOfMonth){
this.dayOfMonth=dayOfMonth;
}
@Length(min=0,max=1,message="周几长度必须介于0和1之间")
publicStringgetDayOfWeek(){
returndayOfWeek;
}
publicvoidsetDayOfWeek(StringdayOfWeek){
this.dayOfWeek=dayOfWeek;
}
@Length(min=0,max=11,message="小时长度必须介于0和11之间")
publicStringgetHour(){
returnhour;
}
publicvoidsetHour(Stringhour){
this.hour=hour;
}
@Length(min=0,max=11,message="分钟长度必须介于0和11之间")
publicStringgetMinute(){
returnminute;
}
publicvoidsetMinute(Stringminute){
this.minute=minute;
}
@Length(min=0,max=11,message="间隔小时长度必须介于0和11之间")
publicStringgetIntervalHour(){
returnintervalHour;
}
publicvoidsetIntervalHour(StringintervalHour){
this.intervalHour=intervalHour;
}
@Length(min=0,max=11,message="间隔分钟长度必须介于0和11之间")
publicStringgetIntervalMinute(){
returnintervalMinute;
}
publicvoidsetIntervalMinute(StringintervalMinute){
this.intervalMinute=intervalMinute;
}
@Length(min=0,max=1,message="1分钟、2小时、3日、4周、5月长度必须介于0和1之间")
publicStringgetJobIntervalUnit(){
returnjobIntervalUnit;
}
publicvoidsetJobIntervalUnit(StringjobIntervalUnit){
this.jobIntervalUnit=jobIntervalUnit;
}
@Length(min=0,max=255,message="规则表达式长度必须介于0和255之间")
publicStringgetCronExpression(){
returncronExpression;
}
publicvoidsetCronExpression(StringcronExpression){
this.cronExpression=cronExpression;
}
@Length(min=1,max=1,message="是否启用长度必须介于1和1之间")
publicStringgetIsEnable(){
returnisEnable;
}
publicvoidsetIsEnable(StringisEnable){
this.isEnable=isEnable;
}
}
[java]view plaincopyprint?
publicclassJob{
privatestaticfinallongserialVersionUID=1L;
/**
*任务执行周期cron表达式
*/
publicstaticintEXECYCLE_CRON=2;
/**
*任务执行周期自定义
*/
publicstaticintEXECYCLE_DEFINE=1;
/**
*执行周期-分钟
*/
publicstaticintEXECYCLE_MINUTE=1;
/**
*执行周期-小时
*/
publicstaticintEXECYCLE_HOUR=2;
/**
*执行周期-日
*/
publicstaticintEXECYCLE_DAY=3;
/**
*执行周期-月
*/
publicstaticintEXECYCLE_WEEK=4;
/**
*执行周期-月
*/
publicstaticintEXECYCLE_MONTH=5;
privateStringjobType;//任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)
privateStringjobName;//任务名称
privateStringjobClass;//任务类
privateStringexecycle;//执行周期分类(1非表达式2cron表达式)
privateStringdayOfMonth;//每月的哪天
privateStringdayOfWeek;//周几
privateStringhour;//小时
privateStringminute;//分钟
privateStringintervalHour;//间隔小时
privateStringintervalMinute;//间隔分钟
privateStringjobIntervalUnit;//1分钟、2小时、3日、4周、5月
privateStringcronExpression;//规则表达式
privateStringisEnable;//是否启用
publicJob(){
super();
}
publicJob(Stringid){
super(id);
}
@Length(min=1,max=1,message="任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)长度必须介于1和1之间")
publicStringgetJobType(){
returnjobType;
}
publicvoidsetJobType(StringjobType){
this.jobType=jobType;
}
@Length(min=1,max=255,message="任务名称长度必须介于1和255之间")
publicStringgetJobName(){
returnjobName;
}
publicvoidsetJobName(StringjobName){
this.jobName=jobName;
}
@Length(min=1,max=255,message="任务类长度必须介于1和255之间")
publicStringgetJobClass(){
returnjobClass;
}
publicvoidsetJobClass(StringjobClass){
this.jobClass=jobClass;
}
@Length(min=1,max=1,message="执行周期分类(1非表达式2cron表达式)长度必须介于1和1之间")
publicStringgetExecycle(){
returnexecycle;
}
publicvoidsetExecycle(Stringexecycle){
this.execycle=execycle;
}
@Length(min=0,max=11,message="每月的哪天长度必须介于0和11之间")
publicStringgetDayOfMonth(){
returndayOfMonth;
}
publicvoidsetDayOfMonth(StringdayOfMonth){
this.dayOfMonth=dayOfMonth;
}
@Length(min=0,max=1,message="周几长度必须介于0和1之间")
publicStringgetDayOfWeek(){
returndayOfWeek;
}
愿意了解框架技术或者源码的朋友直接求求交流分享技术:3133806896
分布式的一些解决方案,有愿意了解的朋友可以找我们团队探讨
更多详细源码参考来源