使用Spring的@Scheduled实现定时任务

https://blog.csdn.net/prisonbreak_/article/details/49180307

使用Spring的@Scheduled实现定时任务

2015年10月16日 16:23:21 阅读数:103485更多

个人分类: Java开发

Spring配置文件xmlns加入

xmlns:task="http://www.springframework.org/schema/task"

xsi:schemaLocation中加入

     http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.0.xsd"

Spring扫描注解的配置

<context:component-scan base-package="com.imwoniu.*" />

任务扫描注解

<task:executor id="executor" pool-size="5" />  
<task:scheduler id="scheduler" pool-size="10" />  
<task:annotation-driven executor="executor" scheduler="scheduler" />

代码实现:

注解@Scheduled 可以作为一个触发源添加到一个方法中,例如,以下的方法将以一个固定延迟时间5秒钟调用一次执行,这个周期是以上一个调用任务的完成时间为基准,在上一个任务完成之后,5s后再次执行:

@Scheduled(fixedDelay = 5000)
public void doSomething() { // something that should execute periodically
}

如果需要以固定速率执行,只要将注解中指定的属性名称改成fixedRate即可,以下方法将以一个固定速率5s来调用一次执行,这个周期是以上一个任务开始时间为基准,从上一任务开始执行后5s再次调用:

@Scheduled(fixedRate = 5000)
public void doSomething() { // something that should execute periodically
}

 

如果简单的定期调度不能满足,那么cron表达式提供了可能

package com.imwoniu.task;import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class TaskDemo {@Scheduled(cron = "0 0 2 * * ?")  //每天凌晨两点执行void doSomethingWith(){logger.info("定时任务开始......");long begin = System.currentTimeMillis();//执行数据库操作了哦...long end = System.currentTimeMillis();logger.info("定时任务结束,共耗时:[" + (end-begin) / 1000 + "]秒");}
}

以下内容摘自http://biaoming.iteye.com/blog/39532

一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。

按顺序依次为

秒(0~59)

分钟(0~59)

小时(0~23)

天(月)(0~31,但是你需要考虑你月的天数)

月(0~11)

天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)

7.年份(1970-2099)

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点 
"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触发 

有些子表达式能包含一些范围或列表

例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”

“*”字符代表所有可能的值

因此,“*”在子表达式()里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天

 

“/”字符用来指定数值的增量

例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟

         在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样


“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值

当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”

 

“L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写

但是它在两个子表达式里的含义是不同的。

在天(月)子表达式中,“L”表示一个月的最后一天

在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT

如果在“L”前有具体的内容,它就具有其他的含义了

例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五

注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题

 

 

字段   允许值   允许的特殊字符

 0-59 , - * /
 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新闻发布项目——实体类(categoryTB)

package bdqn.newsMange.entity; /*** 新闻类别实体类* author Administrator**/ public class categoryTB {private int categoryID;//编号private String categoryName;//类别名public int getCategoryID() {return categoryID;}public void setCategoryID(int categoryID) {…

.NET Core 系列5 :使用 Nuget打包类库

NuGet是个开源项目&#xff0c;项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目&#xff0c;.NET Core项目完全使用Nuget 管理组件之间的依赖关系&#xff0c;Nuget已经成为.NET 生态系统中不可或缺的一个组件&#xff0c;从项目角度&#xff0c;将项目中…

foxmail 不知道这样的主机_华为P50真机图!网友:早知道这样,就不加价买mate40了...

hello&#xff0c;大家好&#xff0c;欢迎收看本期节目由于各方面原因&#xff0c;今年的华为mate40系列确实很难抢不少心急的用户甚至是加价买了入手之后有的用户有开始后悔了&#xff0c;当然不是该机不好而是他们看到了疑似华为P50的真机渲染图它的正面并没有丑陋的双打孔&a…

F#年度调查结果概述

本文要点 年度社区调查向600多名开发人员了解了他们的F#使用情况&#xff1b;在工作中&#xff0c;F#的最大好处包括正确性、让不合法状态不可达以及能够更轻松地解决复杂的问题&#xff1b;大多数F#开发人员仍然使用Windows作为他们的开发平台之一&#xff0c;但使用Mac和Linu…

java Date获取 年月日时分秒

转载自 java Date获取 年月日时分秒 package com.util;import java.text.DateFormat; import java.util.Calendar; import java.util.Date;public class Test {public void getTimeByDate(){Date date new Date();DateFormat df1 DateFormat.getDateInstance();//日期格式&…

anroid 内存溢出 Bitmap OutOfMemoryError

Bitmap OutOfMemoryError 2014年06月09日 09:55:28 阅读数&#xff1a;2434 标签&#xff1a; OutOfMemoryErrorBitmap回收 更多 个人分类&#xff1a; 异常问题和解决办法 在创建Bitmap的时候由于对象过多而没有即使回收&#xff0c;导致的内存不足&#xff1a; java.lang…

wxml报错原因_C#生成、解析xml文件以及处理报错原因

转载自&#xff1a;http://blog.csdn.net/lilinoscar/article/details/21027319简单的介绍一下生成XML文件以及解析&#xff0c;因为有些数据不一定放到数据库&#xff0c;减少链接数据库用xml还是比较好些。如果遇到问题也就是解析时报错&#xff0c;对于解析&#xff0c;可以…

新闻发布项目——接口类(UserDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.User;/*** 用户信息接口* author Administrator**/ public interface UserDao {//查询public List<User>getAllUesr();//添加public int addUser(User user);//修改public int updateUse…

替代反射调用的几种方式及性能测试

园子里和这个话题的相关文章比较多&#xff0c;本文是旧话重提&#xff0c;外加个小的总结。主要因为近期看到很多同事、朋友都已经使用 VS2012 进行 .NET 4.5 开发了&#xff0c;却还在大量使用反射&#xff0c;不知道用新的方式。或有所了解&#xff0c;但又害怕性能不好不敢…

JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库

转载自 JAVA解析html文档&#xff0c;替换img图片路径成base64编码&#xff0c;并将文章存入数据库开发环境&#xff1a;struts2 spring hibernate 数据库:oracle 需求&#xff1a;在HTML编辑器中输入文章&#xff0c;传入后台&#xff0c;文章中所有图片路径&#xff0c;转换…

Android Bitmap OutOfMemory 解决办法

Android Bitmap OutOfMemory 解决办法 置顶 2014年07月01日 14:41:22 阅读数&#xff1a;3072 标签&#xff1a; OutOfMemoryBitmapandroid图片优化更多 个人分类&#xff1a; 异常问题和解决办法 在Android应用里&#xff0c;最耗费内存的就是图片资源。而且在Android系统中…

为什么光标停在表格中间_word里面为什么打出来的数字中间为啥差一个光标的距离 - 卡饭网...

为Word宏添加VBA项目的数字证书签名为Word宏添加VBA项目的数字证书签名 用户在使用Word编辑文档时可以借助Word宏命令提高工作效率。在默认情况下&#xff0c;Word宏的安全性设置为“高”&#xff0c;当运行Word宏命令时会自动禁用宏。如果将Word宏安全性设置为“中”&#xff…

Java8学习笔记(1) -- 从函数式接口说起

转载自 Java8学习笔记&#xff08;1&#xff09; -- 从函数式接口说起希望本文能够成为Java8 Lambda表达式的快速入门指南。 函数式接口 理解Functional Interface&#xff08;函数式接口&#xff0c;以下简称FI&#xff09;是学习Java8 Lambda表达式的关键所在&#xff0c;所…

.Net Aop(静态织入)框架 BSF.Aop

BSF.Aop .Net 免费开源&#xff0c;静态Aop织入&#xff08;直接修改IL中间语言&#xff09;框架&#xff0c;类似PostSharp(收费)&#xff1b;实现前后Aop切面和INotifyPropertyChanged注入方式。 开源地址: https://git.oschina.net/chejiangyi/BSF.Aop 开源QQ群: .net 开源基…

C#7.0中有哪些新特性?

以下将是 C# 7.0 中所有计划的语言特性的描述。随着 Visual Studio “15” Preview 4 版本的发布&#xff0c;这些特性中的大部分将活跃起来。现在是时候来展示这些特性&#xff0c;你也告诉借此告诉我们你的想法&#xff01; C&#xff03;7.0 增加了许多新功能&#xff0c;并…

java8的函数指针

转载自 java8的函数指针这段时间 项目实在是太紧了&#xff0c;没有时间写博客啊。java模式的文章还没有写完&#xff0c;后期在写吧。 最近项目中大量的使用到了远程调用以及回调。是采用反射的方式实现的。担心到大量的反射会影响到程序运行的效率问题。 所以决定放弃使用反…

新闻发布项目——接口类(newsTbDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.newsTb;/*** 新闻的接口类* author Administrator**/ public interface newsTbDao {//查询public List<newsTb>getnewsTbAll();//添加public int addNewsTb(newsTb news);//修改public i…

nbiot开发需要掌握什么_学习软件开发需要准备什么?

2020年&#xff0c;随着Internet的不断发展&#xff0c;现在Internet已经融入到每个人的生活中&#xff0c;所以在计算机行业的发展中&#xff0c;软件开发技术就显得非常重要&#xff0c;因为它是与我们的生活息息相关的&#xff0c;选择许多人想学习Java软件开发技术&#xf…

面试项目 java-服务端 18h58

以淘宝为例子介绍一下 这个架构非常之复杂&#xff0c;创业公司无法达到这样的架构&#xff0c;在当前阶段找到适合的架构 用户名唯一 横向越权 纵向越权 ftp服务器 mybatis mybatis反向工程 mybatis pageHelper 所有的东西在一个服务器上面 三台服务器单独做一个东…

Google高性能RPC框架gRPC 1.0.0发布

鉴于gRPC已进入稳定版分支&#xff0c;并对应用于生产中准备就绪&#xff0c;Google发布了gRPC 1.0。 gRPC源于被称为Stubby的Google内部项目&#xff0c;早期是用于一些Google内部服务间的通信。18个月前Google开源了gRPC框架&#xff0c;希望借此gRPC能被更广泛地采纳&#x…