zoukankan      html  css  js  c++  java
  • Quartz与Spring强强联手,定时任务实现更容易

    Quartz与Spring强强联手,定时任务实现更容易
     
    环境:
    Spring 2.5.4
    Quartz 1.6.0
     
    Quartz是一个企业级的定时任务执行工具,使用起来也相当容易。但是也有点约束----每个作业必须实现Job接口。
     
    Spring早在1.0就对Quartz提供了支持。Spring AOP的强大功能可以将这个无聊的事情见鬼去吧。我们甚至可以将任何一个普通类的方法设定为定时执行的方法。并且在Spring初始化的自动启动定时器(不需要你去写Main方法),在Spring关闭的时候结束定时器的运行,一避免应用服务器都关闭了,定时器还在后台默默无闻“空转”。呵呵,下面就看个例子吧:
     
    目标:将一个普通的业务方法作为定时作业的方法通过Spring配置去执行。
     
    代码:
     
    第一步:写业务方法
     
    package stu.quartz;

    /**
    * 业务方法
    *
    * @author leizhimin,2008-10-8 15:41:52
    */

    public class TestService {
            public void doSomething() {
                    System.out.println("Do Something Freely!");
            }

            public void justDoIt() {
                    System.out.println("Just Do It!");
            }
    }
     
    二、配置Spring
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans default-autowire="byName" xmlns="http://www.springframework.org/schema/beans"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans.xsd[/url]">

            <!-- 普通的业务Bean -->
            <bean name="testService" class="stu.quartz.TestService"/>

            <!-- 作业 -->
            <bean id="jobDetail_test" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
                    <property name="targetObject" ref="testService"/>
                    <property name="targetMethod" value="justDoIt"/>

            </bean>

            <!-- 触发器 -->
            <bean name="testTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
                    <property name="jobDetail" ref="jobDetail_test"/>
                    <property name="startDelay" value="10"/>
                    <property name="repeatInterval" value="2000"/>
                    <property name="repeatCount" value="100"/>
                    <property name="jobDataAsMap">
                            <map>
                                    <entry key="count" value="10"/>
                            </map>
                    </property>
            </bean>

            <!-- 计划 -->
            <bean name="testScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
                    <property name="triggers">
                            <list>
                                    <ref bean="testTrigger"/>
                            </list>
                    </property>
                    <property name="schedulerContextAsMap">
                            <map>
                                    <entry key="timeout" value="30"/>
                            </map>
                    </property>

                    <!-- Quartz的高级配置-->
                    <!--<property name="configLocation" value="classpath:com/lavasoft/quartz.properties"/>-->
            </bean>

    </beans>
     
    三、写测试
     
    package stu.quartz;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    /**
    * 测试类
    *
    * @author leizhimin,2008-10-8 16:33:21
    */

    public class TestQuartz {
            public static void main(String[] args) {
                    ApplicationContext context = new ClassPathXmlApplicationContext("/Application_quartz.xml");
                    System.out.println("Main方法执行开始了! 定时器伴随着Spring的初始化执行了。。。");

                    System.out.println("Main方法执行结束了!");
            }
    }
     
    运行测试:
    Main方法执行开始了! 定时器伴随着Spring的初始化执行了。。。
    Main方法执行结束了!
    Just Do It!
    Just Do It!
    Just Do It!
    Just Do It!
    Just Do It!
    ......
     
    运行结果表名:在Spring初始化后,定时器根据延迟时间启动执行,并且在执行过过程中,Main线程一直没有退出。定时器线程一直在执行。
     
    在强行终止Main线程的时候,定时器也停止执行。
     

    https://www.jianshu.com/p/6bbd833bbfd4

    https://www.jianshu.com/p/1cd7c3c81bca

    https://www.jianshu.com/p/d759f3878e73

    https://www.jianshu.com/p/ae4e3a5f4f69

    https://www.jianshu.com/p/db24986b85b9

    https://www.jianshu.com/p/3d445cd7d1e5

    https://www.jianshu.com/p/98f96a93d7ca

  • 相关阅读:
    Cannot retrieve the latest commit at this time.
    Github上搭建个人博客记录
    ESPCN超分辨率汇总
    ESPCN处理彩色图像代码
    配置caffe过程中,生成解决方案出错。无法打开包括文件: “gpu/mxGPUArray.h”
    未定义变量 "caffe" 或类 "caffe.reset_all"
    windows下caffe安装配置、matlab接口
    Python3:pyecharts数据可视化插件
    Django:用户登录实例
    Django:提交表单时遇到403错误:CSRF verification failed
  • 原文地址:https://www.cnblogs.com/liudianjia/p/12597494.html
Copyright © 2011-2022 走看看