`
Luob.
  • 浏览: 1574342 次
  • 来自: 上海
社区版块
存档分类
最新评论

spring 第11天 quartz任务调度

阅读更多
Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz

首先说 jar的问题
从Spring3.2.4才开始支持quartz-2.x

如果版本低于 3.2.4 需要导入 quartz-1.x,commons-collections-3.1.jar,jboss-transaction-api_1.1_spec-1.0.0.Final.jar(javax.transaction.UserTransaction.class)

//在java使用quartz
package quartz;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * 定义quartz作业类
 * 单独 使用quartz
 *
 */
public class BuzJob implements Job {
	private boolean isRunning=false;
	
	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		// TODO Auto-generated method stub
		if(!isRunning){
			System.out.println(new Date()+" 作业被调度.");
			for (int s = 0; s < 100; s++) {
				System.out.println("作业完成"+(s+1)+"%");
				try {
					Thread.sleep(1000);
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			System.out.println(new Date()+" 作业调度结束.");
		}else{
			System.out.println(new Date()+" 任务退出");
		}
	}

}

//test
package quartz;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

/**
 * 使用quartz的调度器
 * @author Bin
 *
 */
public class MyQuartzService {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			startScheduler();
		} catch (SchedulerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void startScheduler() throws SchedulerException{
		Scheduler sch=StdSchedulerFactory.getDefaultScheduler();
		
		JobDetail d=new JobDetail("buz", Scheduler.DEFAULT_GROUP, BuzJob.class);
		//重复调度2次,间隔 60s
		Trigger t=new SimpleTrigger("buz", Scheduler.DEFAULT_GROUP, 2, 60000);
		sch.scheduleJob(d, t);
		sch.start();
	}

}




//在spring中使用quartz
//使用MethodInvokingJobDetailFactoryBean 可以装配任何普通的bean中方法 不用继承
package quartz;

public class QuartzJob {

	public void work(){
		System.out.println("Quartz调度");
	}
}

 <!-- step:1 定义 quartz业务类-->
 <!--定义一个  工作业务类,要做的事情-->
 <bean id="quartzjob" class="quartz.QuartzJob"/>

<!-- step:2  对业务类进行详情描述-->
   <!--采用  MethodInvokingJobDetailFactoryBean 装配 任务详情 -->
   <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="quartzjob"/>
	   <property name="targetMethod" value="work"/>
	   <property name="concurrent" value="false" />
	   <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
   </bean>

  <!-- 装配触发器 -->
   <bean id="dotime" class="org.springframework.scheduling.quartz.CronTriggerBean">
   		<property name="jobDetail" ref="jobtask"/>
   		<property name="cronExpression" value="0 * 20 * * ?"/>
   </bean>

 <!-- 配置一个线程执行器,用于任务注册 -->
   <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
   		<property name="corePoolSize" value="10"/>
   		<property name="maxPoolSize" value="100"/>
   		<property name="queueCapacity" value="500"/>
   </bean>
  
   <!-- step:4 将触发器  交给调度工厂 -->
   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref local="cronTriggerPunch"/>
				<ref local="dotime"/>
				<ref local="cronTriggerPunch1"/>
			</list>
		</property>
		<property name="taskExecutor" ref="executor"/> 
		<property name="autoStartup" value="true"/>
		<property name="startupDelay" value="60"/>
	</bean>


//使用JobDetailBean装配 业务
package quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import annotation.model.interfaces.Dog;

public class PunchJob extends QuartzJobBean {

	private boolean isRunning=false;
	
	private Dog dog;
	public void setDog(Dog dog) {
		this.dog = dog;
	}

	@Override
	protected void executeInternal(JobExecutionContext context)
			throws JobExecutionException {
		// TODO Auto-generated method stub
		if(!isRunning){
			System.out.println("开始工作");
			dog.sound();
			isRunning=false;
		}
	}

}

   <!--step:3 对已经详情描述过的bean,装配给 触发器 -->
   <bean id="cronTriggerPunch" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<!-- 采用嵌套类 bean-->
		<property name="jobDetail">
			<!--使用JobDetailBean 装配任务详情   -->
			<bean class="org.springframework.scheduling.quartz.JobDetailBean">
				<property name="jobClass" value="quartz.PunchJob"/>
				<property name="jobDataAsMap">
					<map>
						<entry key="dog" value-ref="bagong"/>					
					</map>
				</property>
			</bean>
		</property>
		<property name="cronExpression" value="0 0/1 * * * ?"/>
	</bean>

  <!-- PunchJob1:m没有采用 嵌套bean -->
   <bean id="punchjobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
   	   <property name="jobClass" value="quartz.PunchJob1"/>
   	   <property name="jobDataAsMap">
			<map>
				<entry key="dog" value-ref="rifle"/>					
			</map>
		</property>
   </bean>

<bean id="cronTriggerPunch1" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="punchjobDetail"/>
		<property name="cronExpression" value="0 0/1 * * * ?"/>
	</bean>





<!-- step:4 将触发器  交给调度工厂 -->
   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref local="cronTriggerPunch"/>
				<ref local="dotime"/>
				<ref local="cronTriggerPunch1"/>
			</list>
		</property>
		<property name="taskExecutor" ref="executor"/> 
		<property name="autoStartup" value="true"/>
		<property name="startupDelay" value="60"/>
	</bean>
分享到:
评论

相关推荐

    Spring+3.x企业应用开发实战光盘源码(全)

     第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。  第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。  第15章:对...

    Spring.3.x企业应用开发实战(完整版).part2

    第11章 使用Spring JDBC访问数据库 11.1 使用Spring JDBC 11.1.1 JDBCTemplate小试牛刀 11.1.2 在DAO中使用JDBCTemplate 11.2 基本的数据操作 11.2.1 更改数据 11.2.2 返回数据库的表自增主键值 11.2.3 批量更改数据...

    陈开雄 Spring+3.x企业应用开发实战光盘源码.zip

     第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。  第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。  第15章:...

    spring in action英文版

     第11章 保护Spring 应用程序  11.1 Acegi安全系统介绍  11.1.1 安全拦截器  11.1.2 认证管理器  11.1.3 访问决策管理器  11.1.4 运行身份管理器  11.2 管理身份验证  11.2.1 配置...

    Spring in Action(第2版)中文版

    第11章spring和ejb 11.1在spring中置入ejb 11.1.1代理会话bean(ejb2.x) 11.1.2将ejb置入springbean 11.2开发spring驱动的ejb(ejb2.x) 11.3spring和ejb3 11.3.1引入pitchfork 11.3.2从pitchfork起步 11.3.3...

    Spring攻略(第二版 中文高清版).part1

    第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 解决方案 442 11.1.3 工作原理 442 11.2 创建Grails应用 443 11.2.1 问题 443 11.2.2 解决方案 443 11.2.3 工作原理 443 ...

    Spring 2.0 开发参考手册

    9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程...

    Spring in Action(第二版 中文高清版).part2

    第11章 Spring和EJB 11.1 在Spring中置入EJB 11.1.1 代理会话Bean(EJB 2.x) 11.1.2 将EJB置入Spring Bean 11.2 开发Spring驱动的EJB(EJB 2.x) 11.3 Spring和EJB3 11.3.1 引入Pitchfork 11.3.2 从Pitchfork...

    Spring in Action(第二版 中文高清版).part1

    第11章 Spring和EJB 11.1 在Spring中置入EJB 11.1.1 代理会话Bean(EJB 2.x) 11.1.2 将EJB置入Spring Bean 11.2 开发Spring驱动的EJB(EJB 2.x) 11.3 Spring和EJB3 11.3.1 引入Pitchfork 11.3.2 从Pitchfork...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 9.5.7. 插入事务操作 9.5.8. 结合AspectJ...

    Spring3.x企业应用开发实战(完整版) part1

    第11章 使用Spring JDBC访问数据库 11.1 使用Spring JDBC 11.1.1 JDBCTemplate小试牛刀 11.1.2 在DAO中使用JDBCTemplate 11.2 基本的数据操作 11.2.1 更改数据 11.2.2 返回数据库的表自增主键值 11.2.3 批量更改数据...

    Spring攻略(第二版 中文高清版).part2

    第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 解决方案 442 11.1.3 工作原理 442 11.2 创建Grails应用 443 11.2.1 问题 443 11.2.2 解决方案 443 11.2.3 工作原理 443 ...

    spring chm文档

    9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程...

    Spring中文帮助文档

    9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @...

    Spring API

    9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @...

    iBase4J分布式系统-其他

    技术选型:核心框架:Sring boot + Spring Framework + Dubbo + ibase4j-common安全框架:Apache Shiro任务调度:Spring + Quartz持久层框架:MyBatis + MyBatis-Plus数据库连接池:Alibaba Druid缓存框架:Redis...

    Grails权威指南

    第11章 与java集成  11.1 服务器端java集成  11.2 通过集成hibernate实现orm  11.2.1 使用hibernatecxml映射  11.2.2 ejb3方式的映射  11.2.3 在pojo实体中使用约束  11.2.4 得到...

Global site tag (gtag.js) - Google Analytics