zoukankan      html  css  js  c++  java
  • 搭建第一个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");
        }
    
    }
  • 相关阅读:
    零基础学Python-第一章 :Python介绍和安装-02.Python的发展历史与版本
    零基础学Python_汇总贴
    零基础学Python-第一章 :Python介绍和安装-01.Python语言的特点
    Spring cloud微服务安全实战-3-11API安全机制之登录
    iOS play video
    Http Live Streaming 实现iphone在线播放视频[转]
    UIWebView分页显示
    ios7适配--uitableviewcell选中效果
    ios7 设置status bar风格
    ios7适配--隐藏status bar
  • 原文地址:https://www.cnblogs.com/haojiahong/p/4667861.html
Copyright © 2011-2022 走看看