• Spring + Quartz配置实例


    Spring为创建Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处。此外Spring还提供了一些便利工具类直接将Spring中的Bean包装成合法的任务。Spring进一步降低了使用Quartz的难度,能以更具Spring风格的方式使用Quartz。概括来说它提供了两方面的支持: 
        1)为Quartz的重要组件类提供更具Bean风格的扩展类; 
        2)提供创建Scheduler的BeanFactory类,方便在Spring环境下创建对应的组件对象,并结合Spring容器生命周期进行启动和停止的动作。 
    配置文件:

    <?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="quartzJob" class="test.Task"></bean>
        <!-- 定义调用对象和调用对象的方法 -->
        <bean id="jobtask"
            class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <!-- 调用的类 -->
            <property name="targetObject">
                <ref bean="quartzJob" />
            </property>
            <!-- 调用类中的方法 -->
            <property name="targetMethod">
                <value>work</value>
            </property>
        </bean>
        <!-- 定义触发时间 -->
        <bean id="doTime"
            class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail">
                <ref bean="jobtask" />
            </property>
            <!-- cron表达式 -->
            <property name="cronExpression">
                <value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>
            </property>
        </bean>
        <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
        <bean id="startQuertz" lazy-init="false" autowire="no"
            class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="doTime" />
                </list>
            </property>
        </bean>
    </beans>
    

    要调度的工作类:

    public class Task{
        public void work() {
            System.out.println("Quartz的任务调度!");
        }
    }
    

    主测试文件:

    public class QuartzTest {
        public static void main(String[] args) {
            System.out.println("Test start.");
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            //如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
            System.out.print("Test end..
    ");
    
        }
    
    }
    

    关闭 quartz:

    WebApplicationContext webApplicationContext = (WebApplicationContext) servletContextEvent
                    .getServletContext()
                    .getAttribute(
                            WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
            StdScheduler quartzScheduler = (StdScheduler) webApplicationContext
                    .getBean("startQuertz");
            if (quartzScheduler != null) {
                System.out.println("quartzScheduler关闭!");
                quartzScheduler.shutdown(true);
            }
    

    若非spring加载:

    try {
    	SchedulerFactory sf = new StdSchedulerFactory();
    	Scheduler scheduler = sf.getScheduler();
    	scheduler.shutdown(true);
    	System.out.println("====关闭quartz===="+scheduler.getSchedulerName());
    } catch (SchedulerException e) {
    	e.printStackTrace();
    }
    

      

    参考文章【http://www.cnblogs.com/kay/archive/2007/11/02/947372.html
               【http://www.diybl.com/course/3_program/java/javajs/2008530/118164.html

  • 相关阅读:
    xml学习笔记2
    用SVN下载sourceforge上的源代码
    析构函数的浅谈《原创》
    论程序员与妓女
    简单的动画
    突然收到Steve Harmon的短消息,真意外啊。
    从长春到北京--“一个人的旅行”
    动画停止和延时
    。NET :遍历某个权限集中的权限列表
    如何让Silverlight程序可以在浏览器外运行
  • 原文地址:https://www.cnblogs.com/caroline4lc/p/3953602.html
Copyright © 2020-2023  润新知