quartz 在spring + jsf 环境中的简单应用
这是我项目中的一个小例子,每天定时删除验证图片(用户登陆和注册时自动生成的所需图片)
一、首先是一个作业代码,用于在指定目录删除验证图片:
package ep.spring.model.quartz;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.StatefulJob;
import java.io.File;
import java.io.Serializable;
import java.util.Map;
/**
* 定时清空校验图
* @author fangbiao
*
*/
public class DelCodeCheckJob implements StatefulJob,Serializable{
//所有的成员变量都是瞬时的
private transient String imagePath;
private transient File imageFile;
private transient Map mapMsg;
public DelCodeCheckJob(){}
public void execute(JobExecutionContext context) throws JobExecutionException {
mapMsg = context.getMergedJobDataMap();
imagePath = System.getenv("tomcat_home").replace('\\', '/')+"/webapps/eppj/images/codeCheck";
imageFile = new File(imagePath);
if(imageFile.exists()){
if(imageFile.list().length !=0){
if(imageFile.delete()){
mapMsg.put("messages", "清空校验图成功...");
}
}else{
mapMsg.put("messages", "校验图缓存目录是空的,无需清空...");
}
}
System.out.println("[任务:"+context.getJobDetail().getName()+"]"+mapMsg.get("messages"));
}
}
二、配置quartz,用于指定作业的时间调度 quartz.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- job -->
<!-- 验证图片清空作业 -->
<bean id="delImageJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>ep.spring.model.quartz.DelCodeCheckJob</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="messages">
<value>delCodeCheckJob 初始化 ...</value>
</entry>
</map>
</property>
<!-- (当你需要applicationContext环境时,可以增加该参数)
<property name="applicationContextJobDataKey">
<value>applicationContext</value>
</property>
--></bean>
<!-- trigger -->
<bean id="delImageTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref local="delImageJob"/>
</property>
<property name="cronExpression">
<!-- 每天3点开始进行一次清理 -->
<value>0 0 3 * * ?</value>
</property>
</bean>
</beans>
三、在web.xml加载quartz.xml,由于我是整合spring+jsf环境下开发的,所以我把这个配置放在:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/datasource.xml,/WEB-INF/applicationContext.xml,/WEB-INF/quartz.xml</param-value>
</context-param>
OK!如果想要把相关的调度数据存储到数据库怎办?下面提供一个配置,因项目不必须,所以没有多加测试,不过具体可到http://www.opensymphony.com/quartz 参考其相关配置.
以下是一个参考文件:quartzJdbc.properties
#配置Scheduler的基本信息
org.quartz.scheduler.instanceName = SpringBookScheduler
org.quartz.scheduler.instanceId = AUTO
#配置Quartz的线程池
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 15
org.quartz.threadPool.threadPriority = 5
#配置所采用的JobStore方式
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.Job