搭建第一个web项目:quartz+spring实现定时任务

测试过程:

先写了一个简单的任务类,测试配置的quartz是否启作用(最终目的是实现定时删除临时储存文件夹)。

spring中添加的配置文件如下:

<!--定时任务 quartz (spring内部集成) -->
    <!-- 定时清空临时文件夹的任务类 -->
    <bean id="taskJob" class="cn.itcast.oa.util.TaskJob"></bean>

    <!-- 定义目标bean和bean中的方法 -->
    <bean id="Job"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref local="taskJob" />
        </property>
        <property name="targetMethod">
            <!-- 要执行的方法名称 -->
            <value>Count</value>
        </property>
    </bean>
    <!--定义触发的时间 -->
    <bean id="cron" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="Job" />
        </property>
        <property name="cronExpression">
            <value>0-59 * * * * ?</value>
        </property>
    </bean>
    <!-- 管理触发器 -->
    <bean autowire="no"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref local="cron" />
            </list>
        </property>
    </bean>

任务类如下:

package cn.itcast.oa.util;

/**
 * 定时任务,清空临时文件夹
 *
 * @author haojiahong
 *
 * @createtime:2015-7-21 下午2:23:55
 *
 *
 */
public class TaskJob {
    static long Count = 0;

    public TaskJob() {
        System.out.println("Bean initialized.");
    }

    public void doFirst() {
        Count();
    }

    public void Count() {
        Count++;
        System.out.print("Count=");
        System.out.println(Count);
    }
}

最后测试成功,输出的结果如下:(任务类实例化之后,每隔一秒钟,调用一次Count方法)

信息: Initializing Spring root WebApplicationContext
16:38:10,184 DEBUG MyApplicationContextUtil:24 - applicationContext进行设置完成。。。
16:38:10,200 DEBUG FtpStore:31 - 初始化了FTP服务器配置参数
Bean initialized.
Count=1
Count=2
Count=3
2015-7-22 16:38:12 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8888
2015-7-22 16:38:12 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2015-7-22 16:38:12 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/16  config=null
2015-7-22 16:38:12 org.apache.catalina.startup.Catalina start
信息: Server startup in 7605 ms
Count=4
Count=5
Count=6
Count=7
Count=8
Count=9
Count=10
Count=11
Count=12
Count=13
Count=14

第一次配置的时候出现了如下异常:

Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1817)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:211)
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:385)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138)
    ... 49 more

原因是Spring 3.0版本中内置的Quartz版本是<2.0的,在使用最新的Quartz包(>2.0)之后,接口不兼容。

解决办法有两种:

1.降低Quartz版本,降到1.X去。

2.升级Spring版本到3.1+,根据Spring的建议,将原来的**TriggerBean替换成**TriggerFactoryBean,例如CronTriggerBean 就可以替换成 CronTriggerFactoryBean。替换之后问题解决。

最后是自己写的删除临时文件夹及其文件的任务类:

package cn.itcast.oa.util;

import java.io.File;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 定时任务,清空临时文件夹
 *
 * @author haojiahong
 *
 * @createtime:2015-7-21 下午2:23:55
 *
 *
 */
public class TaskJob {
    private Log log = LogFactory.getLog(this.getClass());

    public TaskJob() {
        log.debug("初始化定时任务类完成。。");
    }

    public void exceteDelJob() {
        String tempPath = (String) this.getAppConfig().getAppExtProp()
                .get("fileTempPath");
        System.out.println(tempPath);
        if (!delFile(tempPath)) {
            return;
        }

    }

    private boolean delFile(String tempPath) {
        File file = new File(tempPath);
        if (!file.exists()) {
            log.debug("文件夹不存在");
            return false;
        }
        if (file.isFile()) {
            file.delete();
            log.debug("单个文件删除成功");
            return true;
        }
        File[] files = file.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                f.delete();
                log.debug("文件夹中单个文件删除成功");
            } else {
                this.delFile(f.getAbsolutePath());
                log.debug("开始删除文件夹中的文件夹");
            }
        }
        file.delete();
        return true;
    }

    public AppConfig getAppConfig() {
        return (AppConfig) ApplicationUtil.getBean("appConfig");
    }

}
时间: 2024-10-05 16:37:53

搭建第一个web项目:quartz+spring实现定时任务的相关文章

搭建第一个web项目:实现用户的增删改查

好久没写这个web的代码了,再不写估计以前的也忘记的差不多了,赶紧复习下,顺便把自己的想法慢慢实现了. 最近在公司发现以前的项目有用easyUI搭建的.赶紧copy回来学习下. 感觉写日志真的很有必要,自己总结的肯定要比每次从网上查阅来的靠谱.每次搭建一个基本的web项目都都要查ssh的配置真的很忧伤啊,有木有!!! 把jar包的截图截了一下,要不总是记不清该用到的基本jar有啥. 其中Struts中用到的jar有:commons-fileupload.jar  commons-io.jar  

搭建第一个web项目:Struts+hibernate+spring配置(annotation)

Struts.xml的配置: 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5

搭建第一个web项目:实现用户的增删改查(二)

最近学了点java和微信的东西,公司这个项目有搭建不起来,在公司有时间的时候就学点Android了,放了个端午假期又颓废了一段时间,这个增删改还没有整理好,我勒个去啊. 不过最近慢慢整理项目的时候,发现了一些思路,对以后和像我一样的新手来说也许有不少的帮助. 1.不要一味心思的去赶紧实现自己的想法,其实一步一步,从简单的来,慢慢测试,也许更节约时间. 这次就是急着去扩展easyUI的dialog,模仿公司的扩展方法,可是一直不成功.反而先做一个简单的dialog,慢慢一步步调试,就会发现自己犯的

搭建第一个web项目:jasperReports+ireport制作pdf报表

一:jasperReports介绍: 在web应用中,必须面临大量的报表问题,即将数据库中的数据形成报表并进行打印.传统开发只能使用html页面设计报表,效率低且不支持别的格式.所以jasperReports因运而生. jasperReports是一款强大的灵活的报表生成工具,能够生成pdf.html和xml格式的报表,是开源的,可以免费的使用她.并且完全使用java写成,可以用在各种java程序中(她的文档是收费的). 二:jar说明: 首先,需要往项目中添加的jar文件有: 核心包:jasp

搭建第一个web项目:实现用户的增删改查(三)

每个程序员都有自己写代码的习惯吧,用公司编代码的方式习惯了之后,就按照公司的方法在后台建立了一些工具类. util类——JPAUtil.java(与数据库打交道)备注:只是一部分,只做了增删改查. package cn.itcast.oa.util; import java.io.Serializable; import java.util.List; import org.springframework.beans.BeansException; import org.springframew

搭建第一个web项目:实现用户的增删改查(四)

前台采用了easyUI框架. 这里浪费时间比较多的就是对easyUI中的一些插件的扩展.因为自己一开始jQuery基础确实不是太好,有些问题不能及时发现. 下面是easyUI一个增删改的列表实现: 在图中,可以看到列表底部有总记录,页码,还有reload按钮和添加按钮.所以在项目中建立了一个工具类,用于包装这些数据.EasyGridAction.java package cn.itcast.oa.base; import org.apache.struts2.convention.annotat

搭建web项目结合spring+cxf的webservice服务

服务端: 服务端和客户端都需要引入包 1 antlr-2.7.7.jar 2 aopalliance-1.0.jar 3 asm-3.3.jar 4 commons-collections-3.2.1.jar 5 commons-lang-2.6.jar 6 commons-logging-1.1.1.jar 7 cxf-2.4.2.jar 8 cxf-manifest.jar 9 cxf-xjc-boolean-2.4.0.jar 10 cxf-xjc-bug671-2.4.0.jar 11

SpringBoot专栏(二) -- 搭建第一个SpringBoot项目

解决问题: 搭建第一个SpringBoot项目? 怎样使用Maven进行Jar管理? SpringBoot Jar包简述? SpringBoot重要注解简述? 注意:使用SpringBoot2.0,JDK的版本必须在1.8以上,不然会出现一些不兼容的问题.搭建第一个SpringBoot项目(使用IDEA) 1. 搭建第一个SpringBoot项目(使用IDEA) 1.1 使用IDEA创建一个Maven工程 GroupId和ArtifactId两个加起来可以理解为项目的"坐标",他们保证

linux系统上部署一个web项目

对于apache开源项目中tomcat的认识,大多停留在Windows下,这次我通过一个简单的实例来介绍一下在linux下如何搭建tomcat环境,并且部署一个web项目. 先从基本安装开始,可别小看linux下的文件安装,那可不是windows下点击next就可以完成,但也并不复杂,重要的是我们学会怎么用快速理解和掌握它,那么一切就变得容易多了,开始吧,当然在安装部署tomcat之前必须先安装好jdk1.6的环境,具体见上一遍博客linux下jdk的安装. 1.先从Apache的官方网站下载下