zoukankan      html  css  js  c++  java
  • Spring框架中的定时器 使用和配置

    Spring框架中的定时器 如何使用和配置

    转载自:《Spring框架中的定时器 如何使用和配置》https://www.cnblogs.com/longqingyang/p/5545437.html

    1.包

    • spring-2.0.6.jar Spring框架的核心包

    • jta.jar 会用到包中的usertransaction,具体什么用此处暂时不论

    • quartz-1.6.0.jar 会用到CronTrigger这个类,通过表达式实现精确的定时

    • commons-logging-1.1.1.jar 日志管理包

    • commons-collections-3.2.1.jar 集合工具包

    2.首先是配置你要定时加载的目标类
      第一种方法:xml方式,例如:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:p="http://www.springframework.org/schema/p" 
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
        <bean id="smsSendService" class="com.timer.smsSendService"/>
    <beans>

      第二种方法:基于注解的方式。例如:@Service(smsSendService)  注:此注解用于Service层

    3.配置你的定时器详情

    <bean id="smsSendServiceJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
            p:targetObject-ref="smsSendService" p:targetMethod="autoSmsTime" p:concurrent="false"/>
    解释:
    p:targetObject-ref:指向你要定时加载的目标类。
    p:targetMethod:指向定时加载目标类中需要执行的方法。即定时执行smsSendService类的autoSmsTime()方法。
    p:concurrent="false":表示不并发操作。对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。
     
    注意:smsSendService类的autoSmsTime()方法没有参数,如果smsSendService有两个方法autoSmsTime()和autoSmsTime(String argument),则spring只会去执行无参的autoSmsTime().例如:
    1
    2
    3
    public void autoSmsTime(){
        System.out.println("无参......");
    }

    4.配置定时器时间间隔

    <!-- 定义时间间隔触发器  每隔10秒执行一次-->
    <bean id="smsSendServiceTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"
            p:jobDetail-ref="smsSendServiceJob" p:cronExpression="*/10 * * * * ?"/>
    解释:
    p:cronExpression:指定定时器什么时候触发。上面是每10秒触发一次。详细参考下面附表。
    5.配置启动定时器
    <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="applicationContextSchedulerContextKey" value="applicationContext" />
            <property name="triggers">
                <list>
                    <ref bean="smsSendServiceTrigger" />
                </list> 
            </property>
    </bean>
    解释:
    triggers:通过再添加其他的ref元素可在list中放置多个触发器。
    6.在web中配置配置文件地址和类加载监听器
    <context-param> 
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    解释:

    ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。如果查看ContextLoaderServlet的 API,可以看到它也关联了ContextLoader这个类而且它实现了HttpServlet这个接口。

    ContextLoader创建的是 XmlWebApplicationContext这样一个类,它实现的接口是 WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->BeanFactory 这样一来spring中的所有bean都由这个类来创建

    讲如何部署applicationContext的xml文件。

    如果在web.xml中不写任何参数配置信息,默认的路径是/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml;

    如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:

    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>  
            /WEB-INF/classes/applicationContext-*.xml   
        </param-value>  
    </context-param>

    在<param-value> </param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并一“,”号分隔。上面的 applicationContext-*.xml采用通配符,比如这那个目录下有applicationContext-ibatis- base.xml,applicationContext-action.xml,applicationContext-ibatis-dao.xml 等文件,都会一同被载入。
    由此可见applicationContext.xml的文件位置就可以有两种默认实现:
    第一种:直接将之放到/WEB-INF下,之在web.xml中声明一个listener;
    第二种:将之放到classpath下,但是此时要在web.xml中加入<context-param>,用它来指明你的 applicationContext.xml的位置以供web容器来加载。按照Struts2 整合spring的官方给出的档案,写成:

    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value> 
    </context-param>

    附表:

    "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触发
    "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 
    每隔5秒执行一次:*/5 * * * * ?
    每隔1分钟执行一次:0 */1 * * * ?
    每天23点执行一次:0 0 23 * * ?
    每天凌晨1点执行一次:0 0 1 * * ?
    每月1号凌晨1点执行一次:0 0 1 1 * ?
    每月最后一天23点执行一次:0 0 23 L * ?
    每周星期天凌晨1点实行一次:0 0 1 ? * L

  • 相关阅读:
    User Get 'Access Denied' with Excel Service WebPart
    How To Search and Restore files from Site Collection Recycle Bin
    How To Collect ULS Log from SharePoint Farm
    How To Restart timer service on all servers in farm
    How to Operate SharePoint User Alerts with PowerShell
    How to get Timer Job History
    Synchronization Service Manager
    SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search
    0x80040E14 Caused by Max Url Length bug
    SharePoint 2007 User Re-created in AD with new SID issue on MySite
  • 原文地址:https://www.cnblogs.com/limeiky/p/8534838.html
Copyright © 2011-2022 走看看