• Quartz集成springMVC 的方案一


    Quartz是一个开放源码项目,专注于任务调度器。

    springMVC 具体的搭建框架就不具体说明,接下来直接描述把Quartz集成到springMVC 框架中。

     步骤:

      1.引入所需要的jar包

      2.新建要定时做的事情的具体实现类和方法,这边可以实现多个类和方法,只要spring-quartz.xml文件中配置任务几个并对应的实现类和方法。

     public class DataButtServiceImpl  {    
    
        public void run() {
           //定时要做的事情的具体实现
         }
     }

    2.新建一个spring-quartz.xml文件放在跟springMVC 的配置文件同级目录就可以了,spring-quartz.xml可以配置多个任务,列如quartzJobA、quartzJobB,并配置对应的方法和时间表达式(什么时间执行)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    
    <beans>
        <!-- 要调用的工作类 -->
        <bean id="quartzJobA" class="cn.handle.data.impl.DataButtServiceImpl"/>
        <!-- 定义调用对象和调用对象的方法A -->
        <bean id="jobtaskA" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <!-- 调用的类 -->
            <property name="targetObject">
                <ref bean="quartzJobA"/>
            </property>
            <!-- 调用类中的方法 -->
            <property name="targetMethod">
                <value>run</value>
            </property>
        </bean>
        
        <!-- 要调用的工作类 
        <bean id="quartzJobB" class="cn.EventProviderServiceImpl"/>-->
        <!-- 定义调用对象和调用对象的方法B 
        <bean id="jobtaskB" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject">
                <ref bean="quartzJobB"/>
            </property>
            <property name="targetMethod">
                <value>run</value>
            </property>
        </bean>-->
        
        <!-- 定义触发时间A -->
        <bean id="doTimeA" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail">
                <ref bean="jobtaskA"/>
            </property>
            <property name="cronExpression">
                <value>0 0/1 * * * ?</value>
            </property>
        </bean>
        
        <!-- 定义触发时间B 
        <bean id="doTimeB" class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail">
                <ref bean="jobtaskB"/>
            </property>
            <property name="cronExpression">
                <value>0 * * * * ?</value>
            </property>
        </bean>-->
    
        <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
        <bean id="startQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="doTimeA"/>
                    <!-- <ref bean="doTimeB"/> -->
                </list>
            </property>
        </bean>
    </beans>

    cronExpression值有几种如下:

    "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 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
    
    "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触发 

    2.在web.xml中描述启动时要读spring-quartz.xml这个文件并解析

    总结:

      这样的集成存在几个缺点:

       1.我们能不能在页面上进行管理JOB。

       2.不能支持持久化任务,集群和分布式任务。 

    接下去讲另外一个集成,针对上面总结的改进。

  • 相关阅读:
    CRB and His Birthday(2015多校)
    B. Bear and Three Musketeers
    Uva657
    cas服务端改造
    有用的maven插件
    maven管理的非标准目录
    struts2中的action交由spring管理
    数据库分库
    linux内核系列之二_资源
    linux内核系列之一_工具
  • 原文地址:https://www.cnblogs.com/koal/p/4982769.html
Copyright © 2020-2023  润新知