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="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"
default-lazy-init="false">
[java]view plaincopyprint?
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"
default-lazy-init="false">
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/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代码
publicclass Job{
privatestaticfinallong serialVersionUID = 1L;
/**
* 任务执行周期cron表达式
*/
publicstaticint EXECYCLE_CRON =2;
/**
* 任务执行周期自定义
*/
publicstaticint EXECYCLE_DEFINE =1;
/**
* 执行周期-分钟
*/
publicstaticint EXECYCLE_MINUTE =1;
/**
* 执行周期-小时
*/
publicstaticint EXECYCLE_HOUR =2;
/**
* 执行周期-日
*/
publicstaticint EXECYCLE_DAY =3;
/**
* 执行周期-月
*/
publicstaticint EXECYCLE_WEEK =4;
/**
* 执行周期-月
*/
publicstaticint EXECYCLE_MONTH =5;
private String jobType;// 任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)
private String jobName;// 任务名称
private String jobClass;// 任务类
private String execycle;// 执行周期分类(1非表达式 2 cron表达式)
private String dayOfMonth;// 每月的哪天
private String dayOfWeek;// 周几
private String hour;// 小时
private String minute;// 分钟
private String intervalHour;// 间隔小时
private String intervalMinute;// 间隔分钟
private String jobIntervalUnit;// 1分钟、2小时、3日、4周、5月
private String cronExpression;// 规则表达式
private String isEnable;// 是否启用
public Job() {
super();
}
public Job(String id){
super(id);
}
@Length(min=1, max=1, message="任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)长度必须介于 1 和 1 之间")
public String getJobType() {
return jobType;
}
publicvoid setJobType(String jobType) {
this.jobType = jobType;
}
@Length(min=1, max=255, message="任务名称长度必须介于 1 和 255 之间")
public String getJobName() {
return jobName;
}
publicvoid setJobName(String jobName) {
this.jobName = jobName;
}
@Length(min=1, max=255, message="任务类长度必须介于 1 和 255 之间")
public String getJobClass() {
return jobClass;
}
publicvoid setJobClass(String jobClass) {
this.jobClass = jobClass;
}
@Length(min=1, max=1, message="执行周期分类(1非表达式 2 cron表达式)长度必须介于 1 和 1 之间")
public String getExecycle() {
return execycle;
}
publicvoid setExecycle(String execycle) {
this.execycle = execycle;
}
@Length(min=0, max=11, message="每月的哪天长度必须介于 0 和 11 之间")
public String getDayOfMonth() {
return dayOfMonth;
}
publicvoid setDayOfMonth(String dayOfMonth) {
this.dayOfMonth = dayOfMonth;
}
@Length(min=0, max=1, message="周几长度必须介于 0 和 1 之间")
public String getDayOfWeek() {
return dayOfWeek;
}
publicvoid setDayOfWeek(String dayOfWeek) {
this.dayOfWeek = dayOfWeek;
}
@Length(min=0, max=11, message="小时长度必须介于 0 和 11 之间")
public String getHour() {
return hour;
}
publicvoid setHour(String hour) {
this.hour = hour;
}
@Length(min=0, max=11, message="分钟长度必须介于 0 和 11 之间")
public String getMinute() {
return minute;
}
publicvoid setMinute(String minute) {
this.minute = minute;
}
@Length(min=0, max=11, message="间隔小时长度必须介于 0 和 11 之间")
public String getIntervalHour() {
return intervalHour;
}
publicvoid setIntervalHour(String intervalHour) {
this.intervalHour = intervalHour;
}
@Length(min=0, max=11, message="间隔分钟长度必须介于 0 和 11 之间")
public String getIntervalMinute() {
return intervalMinute;
}
publicvoid setIntervalMinute(String intervalMinute) {
this.intervalMinute = intervalMinute;
}
@Length(min=0, max=1, message="1分钟、2小时、3日、4周、5月长度必须介于 0 和 1 之间")
public String getJobIntervalUnit() {
return jobIntervalUnit;
}
publicvoid setJobIntervalUnit(String jobIntervalUnit) {
this.jobIntervalUnit = jobIntervalUnit;
}
@Length(min=0, max=255, message="规则表达式长度必须介于 0 和 255 之间")
public String getCronExpression() {
return cronExpression;
}
publicvoid setCronExpression(String cronExpression) {
this.cronExpression = cronExpression;
}
@Length(min=1, max=1, message="是否启用长度必须介于 1 和 1 之间")
public String getIsEnable() {
return isEnable;
}
publicvoid setIsEnable(String isEnable) {
this.isEnable = isEnable;
}
}
[java]view plaincopyprint?
publicclass Job{
privatestaticfinallong serialVersionUID = 1L;
/**
* 任务执行周期cron表达式
*/
publicstaticint EXECYCLE_CRON =2;
/**
* 任务执行周期自定义
*/
publicstaticint EXECYCLE_DEFINE =1;
/**
* 执行周期-分钟
*/
publicstaticint EXECYCLE_MINUTE =1;
/**
* 执行周期-小时
*/
publicstaticint EXECYCLE_HOUR =2;
/**
* 执行周期-日
*/
publicstaticint EXECYCLE_DAY =3;
/**
* 执行周期-月
*/
publicstaticint EXECYCLE_WEEK =4;
/**
* 执行周期-月
*/
publicstaticint EXECYCLE_MONTH =5;
private String jobType;// 任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)
private String jobName;// 任务名称
private String jobClass;// 任务类
private String execycle;// 执行周期分类(1非表达式 2 cron表达式)
private String dayOfMonth;// 每月的哪天
private String dayOfWeek;// 周几
private String hour;// 小时
private String minute;// 分钟
private String intervalHour;// 间隔小时
private String intervalMinute;// 间隔分钟
private String jobIntervalUnit;// 1分钟、2小时、3日、4周、5月
private String cronExpression;// 规则表达式
private String isEnable;// 是否启用
public Job() {
super();
}
public Job(String id){
super(id);
}
@Length(min=1, max=1, message="任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)长度必须介于 1 和 1 之间")
public String getJobType() {
return jobType;
}
publicvoid setJobType(String jobType) {
this.jobType = jobType;
}
@Length(min=1, max=255, message="任务名称长度必须介于 1 和 255 之间")
public String getJobName() {
return jobName;
}
publicvoid setJobName(String jobName) {
this.jobName = jobName;
}
@Length(min=1, max=255, message="任务类长度必须介于 1 和 255 之间")
public String getJobClass() {
return jobClass;
}
publicvoid setJobClass(String jobClass) {
this.jobClass = jobClass;
}
@Length(min=1, max=1, message="执行周期分类(1非表达式 2 cron表达式)长度必须介于 1 和 1 之间")
public String getExecycle() {
return execycle;
}
publicvoid setExecycle(String execycle) {
this.execycle = execycle;
}
@Length(min=0, max=11, message="每月的哪天长度必须介于 0 和 11 之间")
public String getDayOfMonth() {
return dayOfMonth;
}
publicvoid setDayOfMonth(String dayOfMonth) {
this.dayOfMonth = dayOfMonth;
}
@Length(min=0, max=1, message="周几长度必须介于 0 和 1 之间")
public String getDayOfWeek() {
return dayOfWeek;
}
愿意了解框架技术或者源码的朋友直接求求交流分享技术:3133806896
分布式的一些解决方案,有愿意了解的朋友可以找我们团队探讨
本文出自 “13454739” 博客,谢绝转载!
Spring4+Springmvc+quartz实现多线程动态定时调度
原文地址:http://13464739.blog.51cto.com/13454739/1980177