参考博客:https://www.cnblogs.com/zhenyuyaodidiao/p/4755649.html
本文档采用spring 版本为4.0.8,quartz版本为 2.2.2,以下为操作步骤.
1 在数据库新建quartz持久化的表,根据quartz的版本不同建表语句不同,quartz 2.x.x版本的 sql脚本在文档最后附录A。
2.1 Spring从2.0.2开始便不再支持Quartz。具体表现在 Quartz+Spring 把 Quartz 的 Task 实例化进入数据库时,会产生: Serializable 的错误 。所以需要新建了一个MyDetailQuartzJobBean来实现这个功能:
package com.jeeplus.common.quartz;
import java.lang.reflect.Method;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class MyDetailQuartzJobBean extends QuartzJobBean {
protected final Log logger = LogFactory.getLog(getClass());
private String targetObject;
private String targetMethod;
private ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-context-quartz.xml");
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
try {
logger.info("execute [" + targetObject + "] at once>>>>>>");
Object otargetObject = ctx.getBean(targetObject);
Method m = null;
try {
m = otargetObject.getClass().getMethod(targetMethod);
m.invoke(otargetObject);
} catch (SecurityException e) {
logger.error(e);
} catch (NoSuchMethodException e) {
logger.error(e);
}
} catch (Exception e) {
throw new JobExecutionException(e);
}
}
public void setApplicationContext(ApplicationContext applicationContext) {
this.ctx = applicationContext;
}
public void setTargetObject(String targetObject) {
this.targetObject = targetObject;
}
public void setTargetMethod(String targetMethod) {
this.targetMethod = targetMethod;
}
}
2.2 真正需要实现job的类如下
package com.jeeplus.common.quartz;
import java.io.Serializable;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.mysql.jdbc.Connection;
public class Test implements Serializable{
private Log logger = LogFactory.getLog(Test.class);
private static final long serialVersionUID = -2073310586499744415L;
public void execute () {
System.out.println("@:");
}
}
3 配置spring-context-quartz.xml :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans&