Spring 整合Quartz两种方式(JobDetailBean和MethodInvokingJobDetailFactoryBean方式)
来源:互联网 发布:python编程第四版豆瓣 编辑:程序博客网 时间:2024/06/06 08:35
一、Spring创建JobDetail的两种方式
配置Spring的任务调度抽象层简化了任务调度,在Quartz的基础上提供了更好的调度对象。Spring使用Quartz框架来完成任务调度,创建Quartz的作业Bean(JobDetail),有以下两种方法:
1:利用JobDetailBean包装QuartzJobBean子类(即Job类)的实例。
2:利用MethodInvokingJobDetailFactoryBean工厂Bean包装普通的Java对象(即Job类)。
说明:
1:采用第一种方法 创建job类,一定要继承QuartzJobBean ,实现 executeInternal(JobExecutionContext jobexecutioncontext)方法,此方法就是被调度任务的执行体,然后将此Job类的实例直接配置到JobDetailBean中即可。这种方法和在普通的Quartz编程中是一样的。
2:采用第二种方法 创建Job类,无须继承父类,直接配置MethodInvokingJobDetailFactoryBean即可。但需要指定一下两个属性:
targetObject:指定包含任务执行体的Bean实例。
三、实例()
注:使用了spring的注解方式,这里adResourceServiceImpl 业务bean不需要定义了。
配置Spring的任务调度抽象层简化了任务调度,在Quartz的基础上提供了更好的调度对象。Spring使用Quartz框架来完成任务调度,创建Quartz的作业Bean(JobDetail),有以下两种方法:
1:利用JobDetailBean包装QuartzJobBean子类(即Job类)的实例。
2:利用MethodInvokingJobDetailFactoryBean工厂Bean包装普通的Java对象(即Job类)。
说明:
1:采用第一种方法 创建job类,一定要继承QuartzJobBean ,实现 executeInternal(JobExecutionContext jobexecutioncontext)方法,此方法就是被调度任务的执行体,然后将此Job类的实例直接配置到JobDetailBean中即可。这种方法和在普通的Quartz编程中是一样的。
2:采用第二种方法 创建Job类,无须继承父类,直接配置MethodInvokingJobDetailFactoryBean即可。但需要指定一下两个属性:
targetObject:指定包含任务执行体的Bean实例。
targetMethod:指定将指定Bean实例的该方法包装成任务的执行体。
二、实例(JobDetailBean方式)
1、将spring核心jar包、quartz.jar和Spring-context-support.jar导入类路径。
2、编写Job类PunchJob(该类必须继承QuartzJobBean)
package org.crazyit.hrsystem.schedule;import java.util.Date;import org.springframework.scheduling.quartz.QuartzJobBean;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.crazyit.hrsystem.service.EmpManager;public class PunchJob extends QuartzJobBean {//判断作业是否执行的旗标private boolean isRunning = false;//该作业类所依赖的业务逻辑组件private EmpManager empMgr;public void setEmpMgr(EmpManager empMgr){this.empMgr = empMgr;}//定义任务执行体public void executeInternal(JobExecutionContext ctx) throws JobExecutionException {if (!isRunning){System.out.println("开始调度自动打卡");isRunning = true;//调用业务逻辑方法empMgr.autoPunch();isRunning = false;}}}
3、编写quartz.xml配置文件
<?xml version="1.0" encoding="GBK"?><!-- 指定Spring配置文件的Schema信息 --><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:p="http://www.springframework.org/schema/p"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd" default-lazy-init="false"><!-- 定义<span style="font-family:'courier new','courier';">一</span>个业务逻辑组件,继承业务逻辑组件的模板 --><bean id="empManager" class="org.crazyit.hrsystem.service.impl.EmpManagerImpl" parent="managerTemplate"/><span style="white-space:pre"></span><!-- 定义触发器来管理任务Bean --><span style="white-space:pre"></span><bean id="cronTriggerPunch" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail"><span style="white-space:pre"></span><!-- 使用嵌套Bean的方式来定义任务Bean --><bean class="org.springframework.scheduling.quartz.JobDetailBean"><!-- 指定任务Bean的实现类 --><property name="jobClass" value="org.crazyit.hrsystem.schedule.PunchJob"/><!-- 为任务Bean注入属性 --><property name="jobDataAsMap"><map><entry key="empMgr" value-ref="empManager"/></map></property></bean></property><!-- 指定Cron表达式:周一到周五7点、12点执行调度 --><property name="cronExpression" value="0 0 7,12 ? * MON-FRI"/></bean><!-- 执行实际的调度器--><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTriggerPunch"></ref> <!-- <ref local="cronTriggerPunch"/> 两者都可以用 --> </list> </property></bean></beans>
三、实例()
1、配置文件:
<beans><!-- 调度工厂 --><bean id="scheduler" lazy-init="true" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="startupDelay" value="30"/><property name="triggers"> <list><!--<ref bean="exposureTrigger"/>--></list> </property></bean><!-- 定义触发时间 --><bean id="exposureTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><property name="jobDetail" ref="exposureDetail"></property><property name="cronExpression"><value>*/5 * * * * ?</value></property></bean><!-- 自定义任务 --><bean id="exposureDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="adResourceServiceImpl"></property><property name="targetMethod" value="executeExposure"></property><property name="concurrent" value="false" /></bean></beans>
注:使用了spring的注解方式,这里adResourceServiceImpl 业务bean不需要定义了。
2、java类
public void executeExposure() throws Exception{//1获取可变现的广告位List<AdResource> listIis = adResourceIisDao.selectParam(new HashMap());for (AdResource ad : listIis) {Long id = ad.getId();Integer expValue = adResourceIamsDao.count(id, "getExposureValue");if (expValue != null) {Map map = new HashMap();map.put("expValue", expValue);map.put("id", id);adResourceIisDao.updateParam(map,"updateExp");}}
0 0
- Spring 整合Quartz两种方式(JobDetailBean和MethodInvokingJobDetailFactoryBean方式)
- Spring 整合Quartz两种方式比较(JobDetailBean和MethodInvokingJobDetailFactoryBean方式)
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(MethodInvokingJobDetailFactoryBean方式)
- Quartz学习(七)--Spring整合Quartz(JobDetailBean方式)
- Quartz学习(七)--Spring整合Quartz(MethodInvokingJobDetailFactoryBean方式)
- Quartz学习--Spring整合Quartz(MethodInvokingJobDetailFactoryBean方式)
- web 项目 任务调度 Spring整合Quartz(JobDetailBean方式)
- pring整合Quartz(JobDetailBean方式)
- Spring和Struct2两种整合方式
- 整合SpringMVC 和 Quartz 的两种方式
- Spring整合quartz两种方式以及Spring轮询定时使用
- spring的quartz两种配置方式
- Spring定时器的两种实现方式二(quartz)
- 每个程序员都可能犯过的10个错误
- Linux Bonding
- 修改ipa文件版本号
- 按钮点击上传数据的动画效果
- c#分割/分隔字符串相关
- Spring 整合Quartz两种方式(JobDetailBean和MethodInvokingJobDetailFactoryBean方式)
- java-RMI的使用
- 浅析SLF4j使用
- DOM 节点
- ios高级进阶技能
- STM32位带操作公式详解
- dbms_space.space_usage简单介绍
- 敏捷开发之“燃尽图之谜”
- ARC入门使用