任务调度--spring下的任务调度quartz

之前写过Timer实现任务调度,这篇文章用来写一下在spring下使用quartz实现任务调度,直接上代码:

定义任务对象:

package com;
/**
 * 1. 定义任务对象
 *
 * @author Administrator
 *
 */
public class DataBackup {
    //提供任务方法 - 任务实现的内容
    public void backup(){
        System.out.println("备份数据库");
    }
}

spring的配置文件

<!-- 该配置文件为spring的基本配置文件, springmvc,aop ,transaction等的配置均在此基础上进行 -->
<beans xmlns= "http://www.springframework.org/schema/beans"
      xmlns:context= "http://www.springframework.org/schema/context"
      xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation= "http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.2.xsd
        " >
     <context:component-scan base-package ="com"/>
      <!-- 2.将任务对象交给ioc容器管理
      -->
      <bean id="bu" class="com.DataBackup"> </bean>

    <!--  3. 设置任务调度细节
                                 任务内容有哪个任务对象提供,这个对象中有哪个方法 -->
       <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
         <property name="targetObject" ref="bu"></property>
         <property name="targetMethod" value="backup"></property>
       </bean>
     <!--    4.设置这个任务调度jobdetail执行的时间、周期
                >为哪个任务分配执行时间和周期
                    setJobDetail(JobDetail detail)
                >分配执行周期
                    setCronExpression(string expression)
                                            通过一个表达式- cron表达式
                         [秒    0-59 *
                                                           分   0-59 *
                                                           时    0-23 *
                                                           月内日期   1-31 *
                                                           月   1-12 *
                                                           周内日期    0-6 *
                                                           年    可选 1970-2099
                                                          ?   只能出现在月内日期和周内日期字段中,表示该字段无关紧要 放在月内日期或周内日期的位置
                                                                当指定了月内日期 周内日期无需指定
                          /  增量值 写在/后
                          # 第几个 0 10 9 ? 1 2#2  一月的第二个星期二
                          W 工作日  1W 一月的第一个工作日
                          L 最后一个实例  1L一月的最后一天
                          ]

     -->
       <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
             <property name="jobDetail" ref="jobDetail"></property>
             <property name="cronExpression" value="0 * * * * ?"></property>
       </bean>
      <!--5  配置总调度类  将之前配置的任务调度的过程加载到容器中-->
        <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
                  <property name="triggers">
                    <list>
                        <ref bean="trigger"/>
                    </list>
                  </property>

        </bean>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener
 </listener-class>
 </listener>
     <!-- 配置spring分发器,spring表示对应的 servlet【名可以改】配置文件为spring-servlet.xml -->
     <servlet >
            <servlet-name >spring </servlet-name >
           <servlet-class >org.springframework.web.servlet.DispatcherServlet </servlet-class >
     </servlet >
     <servlet-mapping >
      <!-- 会拦截.do请求-->
            <servlet-name >spring </servlet-name >
            <url-pattern >*.do </url-pattern >
     </servlet-mapping >

  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

quartz中常用的表达式:

“0 0 12 * * ?” 每天中午12点触发

“0 15 10 ? * *” 每天上午10:15触发

“0 15 10 * * ?” 每天上午10:15触发

“0 15 10 * * ? *” 每天上午10:15触发

“0 15 10 * * ? 2005” 2005年的每天上午10:15触发

“0 * 14 * * ?” 在每天下午2点到下午2:59期间的每1分钟触发

“0 0/5 14 * * ?” 在每天下午2点到下午2:55期间的每5分钟触发

“0 0/5 14,18 * * ?” 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

0 0/5 8-10,12-16,20-22 * * ?

"0 0-10/2 14 * * ?" 在每天下午2点到下午2:05期间的每2分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

每天早上6点 0 0 6 * * *

每两个小时 0 * /2 * *

23到次日早上7点,每隔2小时 , 以及8点执行

0 0 23-7/2,8 * * ?

1-3月,每天的4点11分执行

0 11 4 * 1-3 ?

0 4 1 1 * ?

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 11:20:41

任务调度--spring下的任务调度quartz的相关文章

SpringBoot系列:Spring Boot集成定时任务Quartz

一.关于Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.在java企业级应用中,Quartz是使用最广泛的定时调度框架. 在Quartz中的主要概念: Scheduler:调度任务的主要API ScheduleBuilder:用于构建Scheduler,例如其简单实现类SimpleScheduleBuilder Job:调度任务执行的接口,也即定时任务执行的方法 JobDetai

在Spring下集成ActiveMQ

1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spring环境下集成ActiveMQ.如果要在spring下集成ActiveMQ,那么就需要将如下jar包导入项目: 本文有两篇参考文献,因此有两个实例,项目结构如下图所示: 3.实例1 信息发送者:HelloSender.java package edu.sjtu.erplab.springactiv

Spring下@ResponseBody响应中文内容乱码问题

引言: 在JQuery的Ajax请求中,收到的基于后台返回回来的结果出现乱码,在后台其内容正确,到了前台之后,确是乱码??????,该怎样解决呢? 1.  问题的提出 前端基于JQuery的Ajax进行页面请求,可是收到的响应信息中的中文确是乱码:后台使用了基于Spring的@ResponseBody来对响应结果进行了封装. 2. 分析问题 2.1  JQuery前端排除 基于查看,JQuery的前端Ajax请求默认的都是基于UTF-8的请求,指定与否不影响结果信息. 假设坚持要加,在前端jav

spring下配置dbcp,c3p0,proxool

不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的.在以往的应用中,数据源一般是Web应用服务器提供的.在Spring中,你不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源,此外,你还可以通过代码的方式创建一个数据源,以便进行无依赖的单元测试 配置一个数据源     Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0.可以在Spring配置文件中利用这两者中任何

spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差

代码: 为了探寻  '@Resource', '@Autowired', 和'@Inject'如何解决依赖注入中的问题,我创建了一个"Party"接口,和它的两个实现类"Person","Organization".这样我就可以在注入Bean的时候不必使用具体类型(指使用接口类型即可).这样做也方便我研究当一个接口有多个实现类与之匹配的时候Spring是如何解决依赖注入的不确定性的. public interface Party {} packa

【Hibernate学习笔记-3】在Spring下整合Hibernate时, 关于sessionFactory的类型的说明

摘要 在Spring下整合Hibernate时,关于sessionFactory的配置方式主要有两种,分别为注解配置方式,和xml配置方式,下面将对这两种配置方式进行介绍. 1. sessionFactory和数据库对应,有多少个数据库,就需要配置多少个sessionFactory: 2. session相当于数据库连接,进行数据库的CRUD操作时,需要开启session,用完需要关闭session: 3. 配置sessionFactory,主要要配置如下三个方面: 3.1. 数据源配置: 3.

Spring下的@Order和@Primary与javax.annotation-api下@Priority【Spring4.1后】等方法控制多实现的依赖注入(转)

@Order 可以作用在类.方法.属性. 影响加载顺序. 若不加,spring的加载顺序是随机的. @Primary 当注入bean冲突时,以@Primary定义的为准. @Order是控制配置类的加载顺序,还能控制List<XXX> 里面放的XXX的实现注入的顺序,下面介绍使用Spring下的@Order和@Primary与javax.annotation-api下@Priority[Spring4.1后,参考:https://jira.spring.io/browse/SPR-10548]

Spring整合定时任务调度框架Quartz实战

定时的任务处理在程序开发中应用的相当普遍,之前一直使用JDK的Timer类库来做任务调度功能不是很方便,因为它不能像cron服务那样可以指定具体年.月.日.时和分的时间,我们只能将时间通过换算成微秒后传给它,而在quartz中我们只需要设置cronExpression就可以完成定时的周期性的方法调用.Quartz中最核心的是任务调度器Scheduler,它负责管理Job,Trigger和 Calendar,而每一个Job就是一个需要执行任务的java类,在Schelduler调度任务时 执行的就

Quartz任务调度[Spring+Quartz结合]_实现任务的动态添加、修改和删除

项目框架图 下面开始贴代码了,不过先贴数据库^^ -- Create table Oracle数据库 create table QUARTZ_SCHEDULEJOB ( id VARCHAR2(32), job_name VARCHAR2(32) not null, job_status NVARCHAR2(3) default 0 not null, cron_expression NVARCHAR2(32) not null, concurrent NVARCHAR2(3) default