zoukankan      html  css  js  c++  java
  • spring常规任务(轻便易)

    spring提供了定时任务功能。我们不需要第三者jar包支持。spring够了。

    代码:

    package com.inth.product.web.task;
    
    import java.util.Date;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    import com.inth.product.service.impl.ContractServiceImpl;
    
    @Component("changeStateTask")
    public class ChangeStateTask{
    	
    	@Autowired
    	private ContractServiceImpl contractServiceImpl;
    	/**
    	 * 定时更改合同状态
    	 * 0 0 * * * ?  表示每次秒和分为0时触发一次(每小时一次)
    	 * "@Scheduled"时spring提供的定时任务标签
    	 * 须要在applicationContext.xml中加入
    	 * xmlns:task="http://www.springframework.org/schema/task" 
    	 * xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd "
    	 * 	<task:annotation-driven scheduler="qbScheduler" mode="proxy"/>  
    	 *  <task:scheduler id="qbScheduler" pool-size="10"/
    	 * ChangeStateTask.doJob()<BR>
    	 * <P>Author : DingYinLong </P>  
    	 * <P>Date : 2014年7月28日 </P>
    	 */
    	@Scheduled(cron = "0 0 * * * ?")
    	public void doJob(){
    		this.contractServiceImpl.executeStateChange();
    	}
    	/**
    	 * 固定每分钟运行一次
    	 * ChangeStateTask.doJob1()<BR>
    	 * <P>Author : DingYinLong </P>  
    	 * <P>Date : 2014年8月1日 </P>
    	 */
    	@Scheduled(fixedRate = 60*1000)
    	public void doJob1(){
    		System.out.println(new Date() + "-----------------doJob1");
    	}
    	/**
    	 * 上次任务结束后一分钟后再次运行
    	 * ChangeStateTask.doJob2()<BR>
    	 * <P>Author : DingYinLong </P>  
    	 * <P>Date : 2014年8月1日 </P>
    	 */
    	@Scheduled(fixedDelay = 60*1000)
    	public void doJob2(){
    		System.out.println(new Date() + "-----------------doJob2");
    	}
    }
    

    applicationContext.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:context="http://www.springframework.org/schema/context"  
        xmlns:task="http://www.springframework.org/schema/task" 
    	xsi:schemaLocation="
    		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 
            http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd ">
    	<!-- 扫描包基础文件夹 -->
        <context:component-scan base-package="com.inth" />
        <!-- 识别@Scheduled注解 -->
    	<task:annotation-driven scheduler="qbScheduler" mode="proxy"/>  
        <task:scheduler id="qbScheduler" pool-size="10"/> 
    </beans>

    注意事项:

    1,beans 属性加上xmlns:task="http://www.springframework.org/schema/task"以及xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd "

    2,fixedRate和fixedDelay的差别写在凝视上了。



    以上情况不基于注解纯配置例如以下:

    代码:

    package com.inth.product.web.task;
    
    import java.util.Date;
    
    
    import com.inth.product.service.impl.ContractServiceImpl;
    
    public class ChangeStateTask{
    	private ContractServiceImpl contractServiceImpl;
    	public void doJob(){
    		System.out.println(new Date() + "-----------------doJob");
    //		this.contractServiceImpl.executeStateChange();
    	}
    	public void doJob1(){
    		System.out.println(new Date() + "-----------------doJob1");
    	}
    	public void doJob2(){
    		System.out.println(new Date() + "-----------------doJob2");
    	}
    }
    
    applicationContext.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:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd "> <!-- 扫描包基础文件夹 --> <context:component-scan base-package="com.inth" /> <bean name="taskJob" class="com.inth.product.web.task.ChangeStateTask"></bean> <task:scheduled-tasks> <task:scheduled ref="taskJob" method="doJob" cron="0/5 * * * * ?

    "/> <task:scheduled ref="taskJob" method="doJob1" fixed-rate="5000"/> <task:scheduled ref="taskJob" method="doJob2" fixed-delay="5000"/> </task:scheduled-tasks> </beans>


    附:cron表达式配置说明 


    字段 同意值 同意的特殊字符 
    秒 0-59 , - * / 
    分 0-59 , - * / 
    小时 0-23 , - * / 
    日期 1-31 , - * ?

    / L W C 
    月份 1-12 或者 JAN-DEC , - * / 
    星期 1-7 或者 SUN-SAT , - * ?

    / L C # 
    年(可选) 留空, 1970-2099 , - * / 
    表达式 意义 
    "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触发 
    特殊字符 意义 
    * 表示全部值。 
    ?

    表示未说明的值,即不关心它为何值。 
    - 表示一个指定的范围; 
    , 表示附加一个可能值; 
    / 符号前表示開始时间,符号的每个增量后值; 

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    【开发技术】Eclipse设置软tab(用4个空格字符代替)及默认utf-8文件编码(unix)
    【开发技术】Xcode3与xcode4.2模板对比(Xcode4.2开发之一些变化)
    cobol
    头文件的相互包含会导致错误
    ndk eclipse集成
    为何要用到NDK?
    Android之NDK开发
    一个完整的NDK编译过程
    NDK中 .so文件的加载
    Android.mk 变量解释
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4819113.html
Copyright © 2011-2022 走看看