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.不能支持持久化任务,集群和分布式任务。 

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

原文地址:https://www.cnblogs.com/koal/p/4982769.html