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

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线程时间配置:Quartz和CronExpression

    在Spring框架中,为了实现定时任务的调度,引入了一个强大的工具——Quartz。Quartz是一个功能丰富的开源作业调度器,可以用于Java应用程序中的作业调度。它支持触发器、作业、日历等功能,并且能够根据复杂的Cron...

    spring执行定时任务的规则

    在Spring框架中,实现定时任务主要依赖于Spring的集成模块Spring Integration或通过集成第三方库如Quartz来完成。本文将重点介绍如何利用Spring框架结合表达式规则来配置和执行定时任务,这些规则与Linux中的crontab...

    quartz实现定制化定时任务-基于springboot.zip

    Quartz 是一个强大的开源作业调度框架,常被用于构建企业级的应用程序,提供精确和可扩展的定时任务功能。在Spring Boot中集成Quartz,我们可以方便地创建和管理定时任务,使得应用程序能够按照预设的时间间隔执行...

    Spring--quartz中cronExpression配置说明

    在Spring框架中,Quartz是一个强大的任务调度库,它允许开发者定义定时任务并根据预设的时间规则执行。其中,`cronExpression`是Quartz中一个关键的配置项,用于定义任务执行的时间规则,通常用于创建复杂的定时计划...

    Quartz Job Scheduling Framework第11章翻译初稿

    通过阅读《Quartz Job Scheduling Framework第11章》的文档,你将掌握如何利用这个强大的工具来提升你的应用程序的自动化水平,从而提高效率并减少手动操作。 文档中的内容可能还会涵盖错误处理、异常策略、Job状态...

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

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

    spring定时器代码注释

    Spring 框架提供了多种方式来实现定时任务,其中一种常见的方法是使用 Quartz 作为定时任务的调度器。Quartz 是一个开源的作业调度工具,能够触发在 Java 应用程序中定义的作业,并且支持复杂的循环策略。 #### 二...

    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.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-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...

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

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

    Spring所有jar包

    4. **spring-context-support.jar**:这个模块提供了对第三方库的支持,如邮件服务、缓存(如Ehcache)、任务调度(如Quartz)等。 5. **spring-aop.jar**:实现了面向切面编程,提供声明式事务管理、代理模式实现...

    定时任务框架学习资料下篇

    此外,第11章"轻松整合-Quartz的3种常用整合方式演练"将展示如何在Spring、Spring Boot等应用中集成Quartz,实现灵活的定时任务管理。 接着,我们转向ElasticJob,这是一个分布式任务调度框架,源自LinkedIn的...

    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 执行定时器触发器文档

    Spring 通过集成 Quartz 这一成熟的调度框架,为开发者提供了灵活且易于使用的定时任务管理机制。 #### 二、定时任务触发器分类 ##### 2.1 SimpleTrigger 简单触发器 - **定义**:适用于需要简单触发调度的场景。...

    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(第二版 中文高清版).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 Boot 系列实战合集.7z

    14. **定时任务(Task Scheduling)**:可以使用 Spring 的 @Scheduled 注解来实现定时任务,或者集成 Quartz 进行更复杂的调度。 15. **邮件服务**:通过配置和使用 JavaMailSender 接口,可以方便地发送电子邮件...

    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 批量更改数据...

Global site tag (gtag.js) - Google Analytics