`

一.spring集成quartz组件

阅读更多

一.准备

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配置的触发器,没有实现数据的持久哈,数据是保存在内存中的,当服务重启时添加的动态触发器就会丢失。

关于动态触发器的使用和触发器数据持久化,将在接下来的两篇博客中讲述。

 

分享到:
评论

相关推荐

    Spring4.X+Quartz2.X

    3. **集成其他Spring服务**:由于Spring的组件化设计,我们可以方便地将Quartz任务与Spring的其他服务(如Service、DAO等)进行交互。 4. **监控和管理**:Spring MVC可以用来构建一个监控界面,实时查看和控制...

    Spring集成Quartz的代码示例

    以上就是Spring集成Quartz的基本步骤。通过这种方式,你可以利用Spring的IoC和AOP特性,结合Quartz的调度能力,实现高度可配置的定时任务。在实际项目中,你可能还需要处理任务的并发控制、异常处理、任务的持久化等...

    Spring集成Quartz调度框架.pdf

    以下是一个简单的示例,展示如何使用Spring集成Quartz来实现一个每5秒钟执行一次的任务: 1. **定义作业**:创建一个实现`org.quartz.Job`接口的类,编写具体的业务逻辑。 ```java public class MyJob ...

    Spring_QuartZDemo

    【Spring_QuartZDemo】是一个使用Spring框架集成Quartz定时任务的示例项目,它展示了如何在Java应用中利用Spring和Quartz实现任务调度。Quartz是Java领域一款功能强大的开源作业调度库,能够帮助开发者创建、调度和...

    spring-quartz.zip

    Spring 提供了 `org.springframework.scheduling.quartz` 包,包含了与 Quartz 集成所需的各种组件,如 `SchedulerFactoryBean`、`MethodInvokingJobDetailFactoryBean` 和 `CronTriggerFactoryBean`。 例如,我们...

    spring boot集成quartz定时器

    总结,Spring Boot集成Quartz定时器能够方便地创建和管理定时任务,同时利用Spring的依赖注入,使得Job可以灵活地调用其他服务或组件。这种方式使得我们的任务更加模块化和易于维护。在实际开发中,根据项目需求,...

    spring+quartz需要的4个jar包 不需要6个

    在Java开发领域,Spring框架和Quartz库是两个非常重要的组件。Spring是一个全面的企业级应用框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,帮助开发者构建高效、灵活的Java应用程序...

    spring集成quartz

    Spring集成Quartz是一款高效、灵活的任务调度框架,用于在Java应用程序中执行定时任务。Quartz是开源项目,提供了丰富的API和强大的调度功能,而Spring框架则以其强大的依赖注入(DI)和面向切面编程(AOP)能力闻名...

    spring整合quartz文档

    Spring 整合 Quartz 是一种常见的任务调度解决方案,用于在应用程序中安排和执行周期性的任务。Quartz 是一个功能丰富的开源任务调度库,适用于 Java 平台,尤其适用于 J2EE 和 J2SE 应用。它允许开发人员精确地定义...

    spring+quartz任务调度代码版

    本项目"spring+quartz任务调度代码版"显然是一个结合了这两者的实践案例,旨在展示如何在Spring环境下集成和使用Quartz进行任务调度。 Spring框架是一个开源的应用框架,它提供了丰富的功能,包括依赖注入、AOP...

    spring整合quartz两种方式以及spring自带定时任务使用

    Spring框架是Java应用开发中的一个核心组件,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)以及各种企业级服务。Quartz则是一个强大的、开源的作业调度框架,用于创建和执行作业,实现应用程序的定时任务...

    定时调度-Spring集成Quartz

    通过Spring集成Quartz,开发者可以方便地在Java应用中实现复杂的定时任务调度。理解Quartz的核心组件、配置方式以及如何与Spring协作,是成功部署和维护定时任务的关键。同时,合理利用CronTrigger的灵活性,可以...

    spring-context-support.jar,quartz-all-1.6.0.jar

    集成Quartz到Spring项目中,首先需要在Spring的配置文件中定义一个`SchedulerFactoryBean`,这将负责创建和管理Quartz的`Scheduler`实例。然后,我们可以创建一个实现`Job`接口的类来定义任务逻辑,并使用`...

    SpringQuartz的使用文档

    Spring对Quartz进行了集成,使其更易于在Spring应用程序中使用。Spring提供了`FactoryBean`类,如`SchedulerFactoryBean`,用于创建和管理Quartz的`Scheduler`实例。这使得我们可以利用Spring的依赖注入(DI)和管理...

    spring-boot-quartz

    然后,创建一个`Job`接口的实现类,这是Quartz中的核心组件,它定义了定时任务的具体逻辑。例如: ```java import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz....

    spring3-quartz1.x

    在集成Quartz时,我们可以将Quartz的Scheduler、Job、Trigger等组件作为Spring的bean来管理,这样可以利用Spring的优势,例如自动初始化、依赖注入、AOP等特性。 2. **Quartz1.8.6简介** Quartz1.8.6是Quartz的一...

    spring-quartz-03

    综上所述,"spring-quartz-03"这个示例展示了如何在Spring应用中集成Quartz,利用Cron表达式进行定时任务配置,并通过数据库持久化保证任务的可靠性。通过这样的集成,开发者可以方便地创建和管理复杂的定时任务,...

    java动态管理定时任务

    Spring框架是Java开发中的核心组件,它提供了一个全面的编程和配置模型,使得开发过程更加简洁高效。Spring通过其AOP(面向切面编程)特性,可以方便地集成各种第三方库,包括Quartz。 Quartz是开源的作业调度库,...

    quartz2.2.1 spring3.1.1

    Quartz 是一个强大的、完全可定制的作业调度库,而 Spring 则是Java应用程序的全面框架,它提供了依赖注入、AOP(面向切面编程)、事务管理等功能。 Quartz 2.2.1: Quartz 是一个开源的作业调度框架,它允许开发者...

Global site tag (gtag.js) - Google Analytics