spring中使用quartz框架(基于内存)

来源:互联网 发布:淘宝退款贴吧 编辑:程序博客网 时间:2024/06/11 11:00

使用quartz前需要弄清楚的流程:

创建自己的任务类Task

把task注入到quartz的jobDetail中

把jobDetail注入到quartz的触发器trigger中,,一个trigger只能触发一个jobDetail

把所有的trigger注入到quartz的调度器schedule中,,schedule会根据trigger中配置的时间来统一调度

以SSM框架为例:

1、导入包:

<dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz</artifactId>            <version>2.2.1</version>        </dependency>        <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-context-support</artifactId>             <version>${spring.version}</version></dependency>


2、配置文件:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"><!-- 系统定时任务工厂类 --><bean id="systemDescsionScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><!--把下面两个触发器注入到调度器中--><property name="triggers"><list> <ref bean="trigger1"/> <ref bean="trigger2"/></list></property><!--设置线程池的大小为4,,任务少的话,一般不设置--><property name="quartzProperties"><props><prop key="org.quartz.threadPool.threadCount">4</prop></props></property></bean><!-- 定义触发器1 --><bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail"><bean class="org.springframework.scheduling.quartz.JobDetailBean"><!--value是自己写的任务类--><property name="jobClass" value="com.itcast.service.task.Task1" /> <property name="jobDataAsMap"><map><!--entry是任务中通过spring注入的其他bean,我这里是service--><entry key="userService" value-ref="userService"/><entry key="loginService" value-ref="loginService"/></map></property></bean></property><!--触发时间--><property name="cronExpression" value="0 30 00 * * ?"/>  </bean>
<!-- 定义触发器2 --><bean id="trigger2" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail"><bean class="org.springframework.scheduling.quartz.JobDetailBean"><property name="jobClass" value="com.itcast.service.task.Task2"/></bean></property>
<!--触发时间-->
<property name="cronExpression" value="0 0 0 * * ?"/> </bean></beans>

3、任务类:

public class Task1 implements Job{@Autowiredprivate UserService userService;@Autowiredprivate LoginService loginService;@Overridepublic void execute(JobExecutionContext context)throws JobExecutionException {//写自己的业务逻辑}catch(Exception e){}}}
public class Task2 implements Job{@Overridepublic void execute(JobExecutionContext context)throws JobExecutionException {//写自己的业务逻辑}catch(Exception e){}}}


基于内存的任务调度,如果服务器重启什么的,之前的记录就不在了,会根据配置重新执行。下一篇介绍quartz持久化到数据库。


原创粉丝点击