一.准备
1.spring3.x相关包
2.quartz1.8.5
具体需要的就是一些常用jar包,如果不知道,可以启动时报错的提示加入相关包即可。
二.建好一个相应的工程
具体省略
三.将org.springframework.context.support-3.0.0.RELEASE.jar和quartz-1.8.5.jar两个必须jar包放进lib中,其他例如日志包log4j,slf4j等根据需要添加
四.将quartz.properties文件放到src类路径下,具体文件可从quartz.jar解压后得到,或者从官方提供的例子程序中找
文件中相关的主要配置(只配置这些即可正常运行)
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
五.建调度程序的applicationContext-quratz.xml文件,并配置applicationContext.xml在启动时加载
1.applicationContext-quratz.xml文件的内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-lazy-init="false">
<bean name="webserviceScheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testTrigger"/>
<ref bean="testCornTrigger"/>
</list>
</property>
<property name="configLocation" value="classpath:quartz.properties" />
<property name="autoStartup" value="true" />
<property name="schedulerName" value="webserviceScheduler" />
</bean>
<!-- 通过表达式定时触发器 -->
<bean id="testCornTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<bean class="frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="testJob" /><!-- 引用要定时触发的目标类 -->
</property>
<property name="targetMethod">
<value>testCorn</value><!-- 引用要定时触发的目标类中的方法名 -->
</property>
<property name="concurrent">
<value>false</value><!-- 默认为true,一般设置成false,是否允许多个worker执行同一个job -->
</property>
</bean>
</property>
<property name="cronExpression">
<value>0 51 12 4 7 ? 2013</value><!-- 定时时间:秒,分,时,月中那一天,月,周中那一天,年 -->
</property>
</bean>
<!-- 简单的重复执行触发器 -->
<bean id="testTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<bean class="frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="testJob" /><!-- 引用要定时触发的目标类 -->
</property>
<property name="targetMethod">
<value>test</value><!-- 引用要定时触发的目标类中的方法名 -->
</property>
<property name="concurrent">
<value>false</value><!-- 默认为true,一般设置成false,避免数据存储问题 -->
</property>
</bean>
</property>
<property name="repeatInterval">
<!-- 多久重复执行一次,以毫秒为单位 -->
<value>60000</value>
</property>
</bean>
</beans>
2.applicationContext.xml文件内容
<?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"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 注解配置切面,代理类 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!-- 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.111.231:1521:HWAJ" />
<property name="user" value="webservice" />
<property name="password" value="1" />
</bean>
<!-- 事务管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 事务切面 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="modify*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="edit*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:pointcut id="allManageMethod"
expression="execution(* hw.webservice.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManageMethod" />
</aop:config>
<!--注入jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- BaseDao -->
<bean id="baseDao" class="hw.webservice.base.impl.BaseDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<!-- BaseService -->
<bean id="baseService" class="hw.webservice.base.impl.BaseServiceImpl">
<property name="baseDao" ref="baseDao"></property>
</bean>
<bean class="hw.webservice.util.BeanUtil"></bean>
<!-- 任务调度器配置文件 -->
<import resource="classpath*:config/quartz/applicationContext-quratz.xml"/>
<!-- 任务调度器所需service配置文件 -->
<import resource="classpath*:config/spring_config/applicationContext-service-quartz.xml"/>
<!-- 任务调度器所需job配置文件 -->
<import resource="classpath*:config/spring_config/applicationContext-job-service.xml"/>
</beans>
3.applicationContext-job-service.xml内容
<?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"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="testJob" class="hw.webservice.job.TestJob"/>
<bean id="testDynamicJob" class="hw.webservice.job.TestDynamicJob"/>
</beans>
4.applicationContext-service-quartz.xml内容
<?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:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
<bean class="frameworkx.springframework.scheduling.quartz.BeanInvokingJobDetailFactoryBean"></bean>
<bean class="frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"></bean>
<!-- 动态quartz -->
<bean id="schedulerManageService" class="hw.webservice.quartz.SchedulerManageServiceImpl" />
</beans>
5.两个例子:TestJob和TestDynamicJob
TestJob.java 包含表达式触发器和simple触发器两种
package hw.webservice.job;
import hw.webservice.quartz.ISchedulerManageService;
import hw.webservice.util.BeanUtil;
import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class TestJob implements Serializable{
private static final long serialVersionUID = 1L;
private static ISchedulerManageService schedulerManageService;
static{
schedulerManageService = (ISchedulerManageService)BeanUtil.getBean("schedulerManageService");
}
public void test(){
System.out.println("测试触发器,1m执行一次");
// addJob();
}
public void testCorn() throws Exception{
System.out.println("表达式触发器");
addJob();
addSimpleJob();
}
public void addJob() throws Exception{
Map map = new HashMap();
map.put("key", "测试动态job");
Map JobMap = new HashMap();
JobMap.put("jobGroup", "testJobGroup");
JobMap.put("triggeGroup", "testTriggeGroup");
JobMap.putAll(map);
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2013-07-04 12:52:00");
} catch (ParseException e) {
e.printStackTrace();
}
//开始考试任务
JobMap.put("job", "testJob");
JobMap.put("trigger", "tetsTrigger");
JobMap.put("cronExpression", schedulerManageService.getCronexpression_r(date));
JobMap.put("data", "测试");
schedulerManageService.addCronTrigger(JobMap, TestDynamicJob.class);
}
public void addSimpleJob() throws Exception{
Map map = new HashMap();
map.put("key", "测试动态simplejob");
Map JobMap = new HashMap();
JobMap.put("jobGroup", "testJobGroup");
JobMap.put("triggeGroup", "testTriggeGroup");
//开始考试任务
JobMap.put("job", "testJob");
JobMap.put("trigger", "tetsTrigger");
long time = System.currentTimeMillis();
Date date = new Date(time);
JobMap.put("startTime", date);
JobMap.put("endTime", new Date(time+60000));
JobMap.put("repeatCount", 10);
JobMap.put("repeatInterval", 5000);
JobMap.put("data", "测试simplejob");
JobMap.putAll(map);
schedulerManageService.addSimpleTrigger(JobMap, TestDynamicJob.class);
}
}
以上是spring集成quartz1.8.5的完整步骤,以上例子可以实现通过xml文件配置静态的simple触发器和表达式触发器。
弊端:通过xml配置的触发器,没有实现数据的持久哈,数据是保存在内存中的,当服务重启时添加的动态触发器就会丢失。
关于动态触发器的使用和触发器数据持久化,将在接下来的两篇博客中讲述。
相关推荐
3. **集成其他Spring服务**:由于Spring的组件化设计,我们可以方便地将Quartz任务与Spring的其他服务(如Service、DAO等)进行交互。 4. **监控和管理**:Spring MVC可以用来构建一个监控界面,实时查看和控制...
以上就是Spring集成Quartz的基本步骤。通过这种方式,你可以利用Spring的IoC和AOP特性,结合Quartz的调度能力,实现高度可配置的定时任务。在实际项目中,你可能还需要处理任务的并发控制、异常处理、任务的持久化等...
以下是一个简单的示例,展示如何使用Spring集成Quartz来实现一个每5秒钟执行一次的任务: 1. **定义作业**:创建一个实现`org.quartz.Job`接口的类,编写具体的业务逻辑。 ```java public class MyJob ...
【Spring_QuartZDemo】是一个使用Spring框架集成Quartz定时任务的示例项目,它展示了如何在Java应用中利用Spring和Quartz实现任务调度。Quartz是Java领域一款功能强大的开源作业调度库,能够帮助开发者创建、调度和...
Spring 提供了 `org.springframework.scheduling.quartz` 包,包含了与 Quartz 集成所需的各种组件,如 `SchedulerFactoryBean`、`MethodInvokingJobDetailFactoryBean` 和 `CronTriggerFactoryBean`。 例如,我们...
总结,Spring Boot集成Quartz定时器能够方便地创建和管理定时任务,同时利用Spring的依赖注入,使得Job可以灵活地调用其他服务或组件。这种方式使得我们的任务更加模块化和易于维护。在实际开发中,根据项目需求,...
在Java开发领域,Spring框架和Quartz库是两个非常重要的组件。Spring是一个全面的企业级应用框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,帮助开发者构建高效、灵活的Java应用程序...
Spring集成Quartz是一款高效、灵活的任务调度框架,用于在Java应用程序中执行定时任务。Quartz是开源项目,提供了丰富的API和强大的调度功能,而Spring框架则以其强大的依赖注入(DI)和面向切面编程(AOP)能力闻名...
Spring 整合 Quartz 是一种常见的任务调度解决方案,用于在应用程序中安排和执行周期性的任务。Quartz 是一个功能丰富的开源任务调度库,适用于 Java 平台,尤其适用于 J2EE 和 J2SE 应用。它允许开发人员精确地定义...
本项目"spring+quartz任务调度代码版"显然是一个结合了这两者的实践案例,旨在展示如何在Spring环境下集成和使用Quartz进行任务调度。 Spring框架是一个开源的应用框架,它提供了丰富的功能,包括依赖注入、AOP...
Spring框架是Java应用开发中的一个核心组件,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)以及各种企业级服务。Quartz则是一个强大的、开源的作业调度框架,用于创建和执行作业,实现应用程序的定时任务...
通过Spring集成Quartz,开发者可以方便地在Java应用中实现复杂的定时任务调度。理解Quartz的核心组件、配置方式以及如何与Spring协作,是成功部署和维护定时任务的关键。同时,合理利用CronTrigger的灵活性,可以...
集成Quartz到Spring项目中,首先需要在Spring的配置文件中定义一个`SchedulerFactoryBean`,这将负责创建和管理Quartz的`Scheduler`实例。然后,我们可以创建一个实现`Job`接口的类来定义任务逻辑,并使用`...
Spring对Quartz进行了集成,使其更易于在Spring应用程序中使用。Spring提供了`FactoryBean`类,如`SchedulerFactoryBean`,用于创建和管理Quartz的`Scheduler`实例。这使得我们可以利用Spring的依赖注入(DI)和管理...
然后,创建一个`Job`接口的实现类,这是Quartz中的核心组件,它定义了定时任务的具体逻辑。例如: ```java import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz....
在集成Quartz时,我们可以将Quartz的Scheduler、Job、Trigger等组件作为Spring的bean来管理,这样可以利用Spring的优势,例如自动初始化、依赖注入、AOP等特性。 2. **Quartz1.8.6简介** Quartz1.8.6是Quartz的一...
综上所述,"spring-quartz-03"这个示例展示了如何在Spring应用中集成Quartz,利用Cron表达式进行定时任务配置,并通过数据库持久化保证任务的可靠性。通过这样的集成,开发者可以方便地创建和管理复杂的定时任务,...
Spring框架是Java开发中的核心组件,它提供了一个全面的编程和配置模型,使得开发过程更加简洁高效。Spring通过其AOP(面向切面编程)特性,可以方便地集成各种第三方库,包括Quartz。 Quartz是开源的作业调度库,...
Quartz 是一个强大的、完全可定制的作业调度库,而 Spring 则是Java应用程序的全面框架,它提供了依赖注入、AOP(面向切面编程)、事务管理等功能。 Quartz 2.2.1: Quartz 是一个开源的作业调度框架,它允许开发者...