Spring4整合Quartz2实现定时任务
Quartz2可以实现非常复杂的定时任务,其时间表达式也是一个非常强大的功能,如在我们需要定义一个动态任务时,通过Quartz可以很容易就实现这种任务。本文通过Spring和Quartz的整合,实现一个可配置的动态任务。
1.Maven导入Quartz2的依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.2</version>
</dependency>
2.定义对象保存任务信息
注:任务实现的是每日或一周内哪些天的某个时间进行任务。
// 定义更新类型,手动、每天某个时间和每周哪些天哪个时间
public enum ServerUpdateType {
HAND("HAND"), DAILY("DAILY"), WEEKDAYLIY("WEEKDAYLIY");
private String value;
ServerUpdateType(String value) {
this.value = value;
}
public String getValue() {
return value;
}
@Override
public String toString() {
return this.value;
}
public static ServerUpdateType parse(String typeStr) {
ServerUpdateType ret = null;
for (ServerUpdateType type : ServerUpdateType.values()) {
if (type.getValue().equals(typeStr)) {
ret = type;
break;
}
}
return ret;
}
}
@Entity
@Table(name = "Schedule_Job")
public class ScheduleJobInfo implements Serializable{
private static final long serialVersionUID = -6593963167852392917L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "JOB_NAME")
private String jobName;
@Column(name = "UPDATE_TYPE")
private String updateTypeStr;
@Column(name = "UPDATE_HOUR")
private int updateHour;
@Column(name = "UPDATE_MINUTE")
private int updateMinute;
// 1~7 1=SUN or SUN,MON,TUE,WED,THU,FRI,SAT
@Column(name = "UPDATE_WEEKDAYS")
private String updateWeekDays;
public ServerUpdateType getUpdateType() {
return ServerUpdateType.parse(this.updateTypeStr);
}
public void setUpdateType(ServerUpdateType updateType) {
this.updateTypeStr = updateType.getValue();
}
// other getter and setter
}
3.将Quartz纳入Spring管理范围内
public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements
ApplicationContextAware {
private transient AutowireCapableBeanFactory beanFactory;
@Override
public void setApplicationContext(final ApplicationContext context) {
beanFactory = context.getAutowireCapableBeanFactory();