在项目中,经常会用到定时任务,这就需要使用quartz框架去进行操作.

今天就把我最近做的个人主页项目里面的定时刷新功能分享一下,很简单.

首先需要配置一个配置文件,因为我是基于spring框架的,所以在spring的applicationContext.xml配置文件中,导入了另一个配置文件:

<!-- spring整合quartz框架 -->
<import resource="applicationContext-quartz.xml"/>

这是由于防止spring的applicationContext.xml过于臃肿,quartz框架的配置文件如下:

<?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:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> <!-- 配置job -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="site.wangxin520.quartz.PromotionJob"/>
</bean> <!-- 配置触发方式 ,简单类-->
<!-- <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
设置job
<property name="jobDetail" ref="jobDetail"/>
设置开始时间
<property name="startDelay" value="0"/>
设置多少毫秒重复执行 ,这里设置的是24h执行
<property name="repeatInterval" value="6000"/>
</bean> --> <!-- 定时任务 -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 设置job -->
<property name="jobDetail" ref="jobDetail" />
<!-- 设置定时 -->
<property name="cronExpression">
<value>0 0 3 * * ?</value>
</property>
</bean> <!-- 设置job工厂 -->
<bean name="jobFactory" class="site.wangxin520.quartz.JobFactory"></bean> <!-- 设置工作列表 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 设置job的工厂 -->
<property name="jobFactory" ref="jobFactory"/>
<!-- 设置触发器列表 -->
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
</list>
</property>
</bean> </beans>

quartz定时框架,最重要的三个配置:job(任务),trigger(触发方式),工作列表.

job是所需的执行的操作,在job里面有一个filed即jobClass,这个jobClass类,就是执行的任务方法所在的类(后面详细讲).

trigger是触发方式,可以设置什么时间做什么事.

工作列表,就是一个job工厂,可以实现多触发方式,而每个触发方式里面又有一个任务,这就说明了工作列表就是一个带有触发方式的job任务的集合.

  • 在spring中,job工厂是需要自己创建的代码中橙色指向的class类就是自己创建的.代码为:
package site.wangxin520.quartz;

import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory; /**
* 创建的定是框架的jobFactory
* 文件名 : JobFactory.java
* 包名 : site.wangxin520.quartz
* 项目名 : wangxin520
* 作者 : wangXgnaw
*/
public class JobFactory extends AdaptableJobFactory { @Autowired
private AutowireCapableBeanFactory capableBeanFactory; /*
* (重写接口的方法)
* @see org.springframework.scheduling.quartz.AdaptableJobFactory#createJobInstance(org.quartz.spi.TriggerFiredBundle)
*/
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}

这个类就是用来新建一个job工厂的.

  • 触发方式有两种
  1. 一种是定时间段来循环,(在配置中注销掉的一片就是定时间段,具体看注释)
  2. 另一种即使定固定时间点来执行,下述代码就是设置的固定时间点:
    <property name="cronExpression">
    <value>0 0 3 * * ?</value>
    </property>

其中顺序依次为 秒 分钟 小时 日 月 年

这几个值,如果除了年外,写*号就代表任意(任一),年写?号为任意,如果年写固定的,那就会是固定的年份去执行.在我的代码中,我写的意思是每天凌晨3点执行job任务.

这个具体可以见百度.

  • job工作任务
package site.wangxin520.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired; import site.wangxin520.service.BlogService; public class PromotionJob implements Job {
    @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
//需要执行的代码
    }

}

自定义的job任务,需要实现org.quartz.Job接口,重写exectue的方法.在这个方法里面,就可以写需要定时执行的代码了.

spring整合quartz就是这么简单...

基于spring的quartz定时框架,实现简单的定时任务功能的更多相关文章

  1. 基于Spring Aop实现类似shiro的简单权限校验功能

    在我们的web开发过程中,经常需要用到功能权限校验,验证用户是否有某个角色或者权限,目前有很多框架,如Shiro Shiro有基于自定义登录界面的版本,也有基于CAS登录的版本,目前我们的系统是基于C ...

  2. Spring对Quartz的封装实现简单需注意事项

    前段时间在项目中一直使用正常的Quartz突然出现了任务漏跑的情况,由于我以前看过Quartz的内部实现,凭借记忆我觉得是由于Quartz的线程池的使用出现问题导致了故障的发生.为了搞清问题的真相,我 ...

  3. Quartz定时框架入门

    Quartz框架是Java开源的定时任务调度器,Quartz框架中有如下核心概念: 1. Job 任务接口,接口中只声明方法void execute(JobExecutionContext conte ...

  4. 基于spring和Quartz定时器

    最近做一个小项目,要每7天去调用webservice获取一次数据.所以就用定时器来完成spring是4.1.6,quartz是2.2.1. 首先配置spring的xml文件.首先定义你要被执行的类 & ...

  5. 基于Spring的轻量级工作流框架

    项目地址 码云:https://git.oschina.net/null_584_3382/business-flow-parent github:https://github.com/Athlizo ...

  6. 基于Spring Task的定时任务调度器实现

    在很多时候,我们会需要执行一些定时任务 ,Spring团队提供了Spring Task模块对定时任务的调度提供了支持,基于注解式的任务使用也非常方便. 只要跟需要定时执行的方法加上类似 @Schedu ...

  7. Spring使用Quartz定时调度Job无法Autowired注入Service的解决方案

    1)自定义JobFactory,通过spring的AutowireCapableBeanFactory进行注入,例如: public class MyJobFactory extends  org.s ...

  8. Spring整合Quartz定时发送邮件

    功能描述:刚开始接触Quartz,试着用Quartz整合spring实现每隔一分钟发送一封邮件连续发送10次 核心jar: 邮件发送:commons-email-1.2.jar mail.jar(必须 ...

  9. 基于node.js的爬虫框架 node-crawler简单尝试

    百度爬虫这个词语,一般出现的都是python相关的资料. py也有很多爬虫框架,比如scrapy,Portia,Crawley等. 之前我个人更喜欢用C#做爬虫. 随着对nodejs的熟悉.发现做这种 ...

随机推荐

  1. python-wechatAutoReword

    python-微信自动回复功能,基于itchat 2017.9.6 实现群@自动回复 #! /usr/bin/env python3.5.2 # coding="utf-8" im ...

  2. Mac OS下配置PHP Nginx PHP-FPM

    首先需要安装homebrew, 不赘述了 php-fpm php-fpm是mac下自带的软件, 而且兼容不同的PHP版本, 不用额外安装, 但是fpm是需要配置的, 在/private/etc下有个模 ...

  3. CentOS6.2下安装配置MySql

    转自:Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置 如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.ecli ...

  4. 利用eclipse的search功能搜索当前项目的源文件

    当你项目的源文件太多,文件组织结构太复杂的的时候,有时候希望google来帮你一把?给个关键字就把相关的搜索结果给出来? eclipse的search功能基本上就可以完成这个任务,文件搜索,甚至JAV ...

  5. [config]关于make *config

    最近在编译uboot和kernel,二者的编译都有make *_defconfig的用法,而以前都是make menuconfig然后再make, 对于现在这种用法还不太了解,网上查了下,有人给出 如 ...

  6. exit会结束一个进程

    #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include<stdlib.h ...

  7. Libgdx window add alpha action change the background actor alpha

    现象: Stage中包括一个Window,一个Actor,Window中加入alpha action后,Actor也随之消失:Actor加入alpha action后,不起作用. 解决: 重写draw ...

  8. 如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起 到保护作用

    如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起 到保护作用. #include <iostream> /* run this program using ...

  9. HTML5+Canvas+jQuery调用手机拍照功能实现图片上传(二)

    上一篇仅仅讲到前台操作,这篇专门涉及到Java后台处理.前台通过Ajax提交将Base64编码过的图片数据信息传到Java后台,然后Java这边进行接收处理.通过对图片数据信息进行Base64解码,之 ...

  10. Mac 文件读写权限问题 OSError: Operation not permitted

    Mac在OS X 10.11以后加入了Rootless功能,主要是限制了root权限,阻止用户对部分路径下的目录进行更改.受到限制的有以下目录: /System /bin /sbin /usr (ex ...