zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Spring任务调度之Spring-Task详解编程语言

Spring编程语言 详解 Task 任务调度
2023-06-13 09:20:44 时间

一.前言

       上面两篇介绍了在Spring 中使用Timer与Quartz,本篇将介绍Spring3.0以后自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种形式,下面将分别介绍这两种方式。

二、第一种:配置文件方式

 第一步:编写作业类 

             即普通的pojo,如下:


beans xmlns= http://www.springframework.org/schema/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.0.xsd

      task:scheduled-tasks  
                  task:scheduled ref= taskJob method= job1 cron= 0 * * * * ? /  
      /task:scheduled-tasks  
      context:component-scan base-package= com.gy.mytask /

/beans

说明:ref参数指定的即任务类,method指定的即需要运行的方法,cron及cronExpression表达式。 context:component-scan base-package= com.gy.mytask / 这个配置不消多说了,spring扫描注解用的。

第二种:使用注解形式

也许我们不想每写一个任务类还要在xml文件中配置下,[email protected],我们看看源文件中该注解的定义:


@Target
({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE}) 

可以看出该注解有三个方法或者叫参数,分别表示的意思是:

   cron:指定cron表达式。

   fixedDelay:官方文档解释:An interval-based trigger where the interval is measured from the completion time of the previous task. The time unit value is measured in milliseconds.即表示从                       上一个任务完成开始到下一个任务开始的间隔,单位是毫秒。

   fixedRate:官方文档解释:An interval-based trigger where the interval is measured from the start time of the previous task. The time unit value is measured in milliseconds.即从上一个任务                        开始到下一个任务开始的间隔,单位是毫秒。

第一步:编写pojo


http:
//www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http:
//www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
http:
//www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
http:
//www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd" 

说明:理论上只需要加上 task:annotation-driven / 这句配置就可以了,这些参数都不是必须的。

配置完毕,spring task还有很多参数,具体参考xsd文档 http://www.springframework.org/schema/task/spring-task-3.0.xsd

 

Demo

======================================Spring.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:aop= http://www.springframework.org/schema/aop xmlns:tx= http://www.springframework.org/schema/tx
xmlns:task= http://www.springframework.org/schema/task xmlns:p= http://www.springframework.org/schema/p
xsi:schemaLocation=
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.3.xsd

! 隐式地向Spring容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、
PersistenceAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor
context:annotation-config /

! 使用 annotation 自动注册bean
context:component-scan base-package= cn.yunhwa.test
context:exclude-filter type= annotation
expression= org.springframework.stereotype.Controller /
/context:component-scan

! 参数说明:ref参数指定的即任务类,method指定的即需要运行的方法,cron及cronExpression表达式
! 0 0/15 4,5,6 ? * MON-SAT 周一至周六四点、五点、六点,每十五分钟执行一次
task:scheduled-tasks scheduler= myscheduler
task:scheduled ref= testTask method= taskTest
cron= 0 0/1 * * * * /
/task:scheduled-tasks

task:scheduler id= myscheduler pool-size= 10 /
/beans

 

===========================测试类TestTask=============================

package cn.yunhwa.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component( testTask )
public class TestTask {

private Logger logger = LoggerFactory.getLogger(TestTask.class);

public void taskTest() {
logger.debug( 测试task定时任务{}! , 执行 );
}

public static void main(String[] args) {
new TestTask().logger.debug( {}! , 执行 );
}

}

 

引用原文:http://www.cnblogs.com/hongwz/p/5642497.html

 

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,文章可以转载,无需版权。希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15448.html

cjavaxml