spring-quartz定时任务使用小结

在实际项目中,通常需要用到定时任务(定时作业),spring框架提供了很好的实现。

1、  下载spring-quartz插件包

这里默认当前系统中是集成了spring框架的基本功能的。去网上下载spring定时器的jar包,这里用的是quartz-all-1.8.4.jar,下载完成之后添加的项目的classPath中去。

2、编写定时任务执行模块的代码

spring使得定时任务编码十分方便,在编写执行模块时,不需要与任何spring框架的东西耦合,不需要继承或者实现某个类或接口,只需要编写常规的类和方法。通常将需要执行的业务逻辑编写成为一个方法,供定时器调用。

3、配置定时任务

配置文件放在和spring普通配置文件同一路径即可。配置的逻辑是这样的:

a首先初始化调度任务的类,这个配置与其他的常规配置一样,即使用spring的IOC机制,将定时任务看成一个普通的bean。

b然后配置任务执行task,由MethodInvokingJobDetailFactoryBean实现。该配置告诉容器,由哪个类以及哪个方法执行将具体的定时任务。一个定时任务对应一个方法,也对应一个task配置。这里需要配置两个参数,执行类的实例targetObject和执行方法targetMethod。执行类的实例即为前面的配置。执行的方法是类中具体的执行任务的方法。

c接着,配置定时调度触发器,一般由CronTriggerBean实现,这个配置告诉spring何时执行某一个任务。这个配置需要两个参数:执行的任务jobDetail和触发时机表达式cronExpression。第一个参数的值即为前面的task,第二个是一个表达式,表示何时执行该任务,如0 0 0 1 * ?表示每月1好的0点0分触发该任务。具体的配置参照后面的描述。

d配置中心调度器,由SchedulerFactoryBean实现,它告诉spring需要启动那些触发器。这里只有一个参数triggers,它接受一个触发器列表,有多少触发器就有多少定时任务。

到这里,配置完成。

4、启动项目,测试。

5、实例:

a任务类

public class MonthlyJob {
	private A a;
	/**
	 * 具体任务
	 */
	public void initWjxx() {
		.......
	}
	public void setA(
			A a) {
		this.a = a;
	}
}

b配置文件

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<!-- 执行job的类 -->
	<bean id="monthlyJob" class="com.pmi.quartz.MonthlyJob">
		<!-- 注入属性值 -->
		<property name="a" ref="a"/>
	</bean>
	<!-- 初始化调度任务 -问卷信息-->
	<bean id="simMonthlyJobTask"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 调用的类 -->
        <property name="targetObject">
            <ref bean="monthlyJob" />
        </property>
        <!-- 调用类中的方法 -->
        <property name="targetMethod">
            <value>initWjxx</value>
        </property>
        </bean>
	<!-- 触发器-问卷信息 -->
	<bean id="cronTriggerTest" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<!-- 指向我们的任务 -->
		<property name="jobDetail" ref="simMonthlyJobTask" />
		<!--  每月1号的00:00触发 -->
		<property name="cronExpression" value="0 0 0 1 * ?" />
	</bean>
	<!-- 总调度器  -->
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<!--  触发器列表 -->
				<ref bean="cronTriggerTest" />
			</list>
		</property>
	</bean>
</beans>

spring-quartz定时任务使用小结

时间: 2024-10-27 07:32:21

spring-quartz定时任务使用小结的相关文章

Spring Quartz定时任务不准时执行

1. 前言 也是前段时间工作上遇到过这样的问题:quartz定时任务没有在预期的时间执行.后来研究了下quartz的机制,查明了原因,这里做个记录和分享. 2. 原因解释 先看一下spring quartz的大致机制或者说原理.quartz任务由一个主线程和线程池中的多个具体的工作线程构成. 主线程是QuartzSchedulerThread, 主要负责获取具体的定时任务和该任务执行的时间(比如可以通过cron expression 得到时间),并分发任务给线程池. 具体的任务由线程池中的工作线

Java spring quartz 定时任务

首先,需要导入quartz 的jar包 ① applicationContext.xml <!-- 轮询任务 --> <import resource="classpath:/conf/quartz/ctmanage-schedule.xml" /> ② ctmanage-schedule.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q

spring quartz 定时任务“Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder”“Checking for available updated version of Quartz”

Failed to load class "org.slf4j.impl.StaticLoggerBinder 需要slf4j-api.jar.slf4j-log4j12.jar Checking for available updated version of Quartz 添加系统属性 System.setProperty("org.terracotta.quartz.skipUpdateCheck", "true"); spring quartz 定

Spring quartz定时任务service注入问题

今天想单元测试一下spring中的quartz定时任务,一顿折腾,到最后总是发现job类里注入的service为null.一开始还以为spring的配置问题,各种找原因,最后还是确定是没有注入. 就去网上搜搜吧.也找出来一些眉目.简单的理解这个原因是job是在quartz中实例化出来的,不受spring的管理.所以就导致注入不进去了.参考这个文章 http://www.tuicool.com/articles/Qjyamu 找着试试的态度,就按照文章里说的.new一个类 public class

spring quartz定时任务配置【基础篇】

一个定时执行的job package dk.spring.quartz; import java.util.Date; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; /** * 使用spring集成的quartz调度 */ public class QuartzTe

[Spring] - Quartz定时任务 - Annotation

Spring + Quartz可以使用annoation方式: 1.AppJob类: package com.my.quartz.testquartz1; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class AppJob { // @Scheduled(fixedDelay=1000)

Spring+Quartz(定时任务)

1.通过maven导入需要jar <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

一看便知spring+quartz定时任务

这是我经过网上收集然后加上自己的测试写的,以便大家使用 标配:已测 注意需要的包:(在已经配置spring 的情况下) quartz-all-1.6.jar        spring-context-support-4.0.0.jar applicationContext.xml配置文件 <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 当 IoC容器启动时,lazy-init="true"的bean,IoC容器启动时不会实例化该bean

spring quartz定时任务

配置quartz 在spring中需要三个jar包: quartz-1.8.5.jar.commons-collections-3.2.1.jar.commons-logging-1.1.jar 首先要配置我们的spring.xml xmlns 多加下面的内容. [html] view plaincopy xmlns:task="http://www.springframework.org/schema/task" 然后xsi:schemaLocation多加下面的内容. [html]

spring + quartz定时任务,以及修改定时任务

spring4+quartz2.2.3,定时任务弄好了,修改定时任务没折腾起,没找到合适的解决方案. 最终使用库spring-context-support 3.2.17.RELEASE +  quartz 1.8.0解决,quart1.8.x版本的CronTriggerBean弄起来方便 关键代码如下: 1.maven文件 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>qu