Quartz可以用来做什么?
Quartz是一个任务调度框架。在web开发中,比如你遇到这样的问题
- 想每天3点,下发邮件到指定的地方
- 想每年4月1日自己给朋友发一封贺卡
这些问题总结起来就是:在某一个有规律的时间点干某件事。并且时间的触发的条件可以非常复杂(比如每月最后一个工作日的17:50),复杂到需要一个专门的框架来干这个事。 Quartz就是来干这样的事,你给它一个触发条件的定义,它负责到了时间点,触发相应的Job起来干活。
一个简单的示例
1.先创建一个类
package cn.ctyun.jweb.modules.at.timer; @Controller public class TaskSubmission { @Autowired private TaskService taskService; private static Logger log = Logger.getLogger(TaskSubmission.class); public void taskinfoSubmit() throws SQLException{ //方法中可以做你想做的工作 } } |
<?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-3.2.xsd"> <!-- 任务方案提交配置 --> <bean id="dataSubmitSchedule" class="cn.ctyun.jweb.modules.at.timer.TaskSubmission"/> <!--同步任务方案信息--> <bean id="submitAtinfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="dataSubmitSchedule" /> </property> <property name="targetMethod"> <!-- 提交任务方案信息数据 --> <value>taskinfoSubmit</value> </property> </bean> <!--提交任务方案信息触发时间--> <bean id="submitAtinfoTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail"> <ref bean="submitAtinfo"/> </property> <property name="cronExpression"> <value>0 43 16 * * ?</value> </property> </bean> <!-- quartz的调度工厂 调度工厂只能有一个,多个调度任务在list中添加 --> <bean name="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <!-- 所有的调度列表 --> <ref bean ="submitAtinfoTrigger"/> </list> </property> </bean> </beans> |
<context-param> <!--contextConfigLocation 参数定义了要装入的 Spring配置文件 --> <param-name>contextConfigLocation</param-name> <param-value> classpath*:/spring-context*.xml; classpath*:/spring-quartz.xml; </param-value>//加载多个文件可以用分号隔开 </context-param> |
4.在pom文件中添加相关jar包
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency> |
这样就可以在spring-quartz.xml的配置文件配置相关时间,执行方法中需要执行的任务了。如果启动项目后修改时间,需重启后才能重新
加载配置。