spring基于配置applicationContext.xml实现定时任务

spring3.x可以通过<task>标签轻易的定义定时任务,而且不需要依赖第三方jar包如quartz等,这个是spring自己的实现,但不支持集群。

在Spring3.0中引用了新的命名空间-task:
task:scheduler 用于定义一个ThreadPoolTaskScheduler,并可以指定线程池的大小,

即pool-size.所有任务队列都将会在指定大小的线程池中运行:

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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/mvc
                              http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
                              http://www.springframework.org/schema/aop
                            http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
                            http://www.springframework.org/schema/task
                           http://www.springframework.org/schema/task/spring-task-3.2.xsd"
    default-autowire="byName" default-lazy-init="true">

    <!-- 配置映射任务执行的类 -->
       <bean id="myTask" class="com.xsran.core.task.MyTask" />
       <task:scheduled-tasks scheduler="myScheduler">
           <!-- 每十分钟执行一次 passStudyTask:任务类中执行的方法      -->
        <task:scheduled ref="myTask" method="passStudyTask"cron="0 0/10 * * * ?"/>
    </task:scheduled-tasks>
    <task:scheduler id="myScheduler" pool-size="10"/>
</beans>

java代码:

package com.xsran.core.task;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.xsran.core.mybase.Constants;
import com.xsran.core.myutil.Collections3;
import com.xsran.core.myutil.LogUtils;
import com.xsran.modules.task.model.QuartzManage;
import com.xsran.modules.task.service.QuartzManageService;

public class MyTask {
    @Autowired
    private QuartzManageService quartzManageService;    

    /**
     * 定时传送
     */
    public void passStudyTask() {

//      Map<String, String> map = System.getenv();
        try {
            QuartzManage quartzManage = quartzManageService.findQuartzByTaskName("TaskName");//执行方法获取数据
            if (quartzManage != null ) {
                System.out.println(quartzManage);

            }
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}

Spring3.0同样也使用cron表达式。与Quartz不同的是,Spring3.0不支持年,而Quartz支持年。

cron表达式:-是用空格分开的时间字段,不使用年。

*(秒0-59)

*(分钟0-59)

*(小时0-23)

*(日期1-31)

*(月份1-12或是JAN-DEC)

*(星期1-7或是SUN-SAT)

示例:

*/5  * * * * 6-7  :: 每个周6到周日,每隔5秒钟执行一次。

*/1 * * 7-9 1-2 1-7 :: 1月到2月中的7号到9号,且必须要满足周一到周日,每隔1秒钟执行一次。

*/1 * * 7-9 1,5 1-7  :: 注意里面的,(逗号),只有1月和5月的7到9号,且必须要满足周一到周日,每一秒钟执行一次。

*/1 17-59 * 7-9 1,5 1-7 :: 只解释17-59,是指从第17分钟到第59分钟,在指定的时间内,每一秒种执行一次

* 17-59 * 7-9 1,5 1-7  :: 此代码的功能与上面完全相同。如果不写秒即为每一秒执行一次。

59 19-23 * 7-9 1,5 1-7  :: 19分-23分的每59秒钟时只执行一次。

59 19,26 * 7-9 1,5 1-7  :: 注意里面的,(逗号),是指只有19分或是26分的56秒钟时执行一次。

* * 16-23 7-9 1,5 1-7  :: 定义每天的16点到23点每一秒钟执行一次。

59 59 23 * * 1-5  :: 定义每周1到周5,晚上23:59:59秒只执行一次。

这个相当用有。可以工作时间每天给用户发邮件

注:1、本人blog旨在为自己做代码笔记,同时供大家作参考;

  2、本博文字内容拷自blog:http://xls9577087.iteye.com/blog/2123425

时间: 2024-11-08 04:26:57

spring基于配置applicationContext.xml实现定时任务的相关文章

Spring的配置文件ApplicationContext.xml配置头文件解析

Spring的配置文件ApplicationContext.xml配置头文件解析 原创 2016年12月16日 14:22:43 标签: spring配置文件 5446 spring中的applicationContext.xml配置头文件解析 <?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"

web.xml 配置applicationContext.xml

web.xml中classpath:和classpath*:  有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 有时候会用模糊匹配的方式配置多配置文件. 但是如果配置文件是在jar包里,模糊匹配就找不到了.可以用逗号隔开的方式配置多个配置文件. 如: <listener>  <listener-class>org.springframework.web.conte

【转载】Spring中的applicationContext.xml与SpringMVC的xxx-servlet.xml的区别

一直搞不明白两者的区别. 如果使用了SpringMVC,事实上,bean的配置完全可以在xxx-servlet.xml中进行配置.为什么需要applicationContext.xml?一定必须? 一. 因为直接使用了SpringMVC,所以之前一直不明白xxx-servlet.xml和applicationContext.xml是如何区别的,其实如果直接使用SpringMVC是可以不添加applicationContext.xml文件的. 使用applicationContext.xml文件时

web.xml中配置applicationContext.xml 配置文件的存放位置

一.web.xml中classpath:和classpath*:  有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 二.存放位置: 1:src下面 需要在web.xml中定义如下: 1 2 3 4 <context-param> <param-name>contextConfigLocation</param-name> <param-value

Spring中的applicationContext.xml与SpringMVC的xxx-servl

一直搞不明白两者的区别.如果使用了SpringMVC,事实上,bean的配置完全可以在xxx-servlet.xml中进行配置.为什么需要applicationContext.xml?一定必须? 一.因为直接使用了SpringMVC,所以之前一直不明白xxx-servlet.xml和applicationContext.xml是如何区别的,其实如果直接使用SpringMVC是可以不添加applicationContext.xml文件的.使用applicationContext.xml文件时是需要

Spring的配置文件applicationContext.xml

1.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

Spring主配置文件(applicationContext.xml) 导入约束

eclipse导入Spring配置文件约束 Windows-Preference-XML-XMLCatalog 点 Add 选File System 下spring的解压包下的schema文件夹,选beans,然后选择spring对应的版本的xsd文件 选择指定xsd文件,再Key的路径后面添加"/spring-beans-4.2.xsd"点ok 创建applicationContext.xml   写根元素 <beans></beans> Add导入XSI,

spring mvc 和spring security配置 web.xml设置

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://xmlns.jcp.o

Spring加载applicationContext.xml实现spring容器管理的单例模式

package com.etc.pojo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpUtil { static private ApplicationContext ac; static { ac = new ClassPathXmlApplicat