看过很多定时调度的配置,大多使用XML配置,觉得比较麻烦,也比较老套。这里介绍一种基于spring4.0注解编程式配置定时任务,简单清晰,使用方便..

至于引入spring相关jar这里不多说,直接切入正题贴上代码:

@Configuration
@EnableScheduling
public class WebAppConfig implements SchedulingConfigurer {
//TaskScheduler configuration
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
logger.info("Configure task registor: {}", taskRegistrar);
taskRegistrar.setScheduler(taskExecutor());
} @Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(4);
}
}

思路:

我们通常将用于存放配置信息类的类名以 “Config” 结尾,如上我们在WebAppConfig里通过 @Configuration注解,指出该类是Bean配置的信息源,再通过@EnableScheduling开启定时调度,一般情况下实际项目中都是多线程执行定时任务的,所以我们可以通过实现SchedulingConfigurar接口,访问底层的ScheduledRegistrar实例,产生一个Executer对象,然后根据系统的承受能力调整线程池中工作线程的数目,这里我启了4个线程。注意上面使用的@bean(destroyMethod="shutdown")是为了确保当Spring应用上下文关闭的时候任务执行者也被正确地关闭。

使用:

@Component("user.task")
public class userTaskJob {
/**
* 每月第一天凌晨一点执行
*/
@Scheduled(cron="0 0 01 01 * ?")
public void tempUserTaskDelete() {
//do something
}
}

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注,我们可以理解为将这个类交给spring管理,相当于一个java bean,名字叫user.task

到此为止我们就可以通过@Scheduled注解使用corn表达式实现任务调度了。

cron表达式简要介绍:

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

  • 秒(0~59)
  • 分钟(0~59)
  • 小时(0~23)
  • 天(月)(0~31,需要考虑月的天数)
  • 月(0~11)
  • 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
  • 年份(1970-2099)

常用符号代表意思:

  1. * 字符代表所有可能的值。因此,* 在子表达式(月)里表示每个月的含义,* 在子表达式(天(星期))表示星期的每一天
  2. ?字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”
  3. / 字符表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次

几个示例:

  1. 每天的凌晨4点 @Scheduled(cron = "0 0 4 * * *")
  2. 每周日的凌晨5点  @Scheduled(cron = "0 0 5 * * SUN")
  3. 每月第一天凌晨2点10分 @Scheduled(cron="0 10 02 01 * ?")
  4. 每天从下午2点开始到2点55分结束每隔5分钟触发一次 @Schedule(cron = "0 0/5 14 * * ?")

Spring4.0编程式定时任务配置的更多相关文章

  1. SpringBoot 系列教程之编程式事务使用姿势介绍篇

    SpringBoot 系列教程之编程式事务使用姿势介绍篇 前面介绍的几篇事务的博文,主要是利用@Transactional注解的声明式使用姿势,其好处在于使用简单,侵入性低,可辨识性高(一看就知道使用 ...

  2. Filter 起航 编程式配置 压缩响应 日志过滤器

    [编程式配置]可以用web.xml配置替换 @WebListenerpublic class FilterListenerConfigurator implements ServletContextL ...

  3. 事务之三:编程式事务、声明式事务(XML配置事务、注解实现事务)

    Spring2.0框架的事务处理有两大类: JdbcTemplate操作采用的是JDBC默认的AutoCommit模式,也就是说我们还无法保证数据操作的原子性(要么全部生效,要么全部无效),如: Jd ...

  4. Spring4.0支持Groovy配置

    介绍 前一段时间观注了一下Spring4.0的一些特性,当中就有对Groovy配置的支持.因为临时还没有很深入的研究.所以举个小样例来说明一下怎样支持Groovy配置. package shuai.s ...

  5. spring3.0注解定时任务配置及说明

    spring注解方式的定时任务配置: 第一步:spring配置文件 <?xml version="1.0" encoding="UTF-8"?> & ...

  6. 【Python】Linux crontab定时任务配置方法(详解)

    CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在 ...

  7. Spring Aop(十六)——编程式的自定义Advisor

    转发:https://www.iteye.com/blog/elim-2399437 https://www.iteye.com/blogs/subjects/springaop 编程式的自定义Adv ...

  8. Spring Aop(十二)——编程式的创建Aop代理之AspectjProxyFactory

    转发地址:https://www.iteye.com/blog/elim-2397922 编程式的创建Aop代理之AspectjProxyFactory 之前已经介绍了一款编程式的创建Aop代理的工厂 ...

  9. Spring Aop(十一)——编程式的创建Aop代理之ProxyFactory

    转发地址:https://www.iteye.com/blog/elim-2397388 编程式的创建Aop代理之ProxyFactory Spring Aop是基于代理的,ProxyFactory是 ...

随机推荐

  1. 解决Xamarin Android墙的问题

    Xamarin Android项目在编译时会从google的服务器下载缺失的m2repository相关文件,虽然不明白这是干什么的,但是情况就是Andorid SDK Manager不会去下载这个东 ...

  2. 【转】Java面试题全集2.2(下)

    154.如何在Web项目中配置Spring的IoC容器? 答:如果需要在Web项目中使用Spring的IoC容器,可以在Web项目配置文件web.xml中做出如下配置: <context-par ...

  3. [转]数据恢复 文件恢复工具 DiskGenius v4.9.1 绿色专业版及单文件

    必备神软!数据恢复及磁盘分区利器DiskGenius,目前最新版为v4.9.1,现在又有新思路的已注册专业版,已亲测可成功恢复4G以上的大文件,但不能虚拟磁盘格式转换!想用新版功能的有福了,推荐使用! ...

  4. 精通Web Analytics 2.0 (5) 第三章:点击流分析的奇妙世界:指标

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第三章:点击流分析的奇妙世界:指标 新的Web Analytics 2.0心态:搞定它.新的闪亮系列工具:是的.准备好了吗?当然 ...

  5. Mysql服务启动的时候 如何加载配置文件

    Mysql服务启动的时候 如何引导配置文件 (启动加载顺序)

  6. 初识Jsoup之解析HTML

    按照国际惯例,我首先应该介绍下Jsoup是个什么东西,然后在介绍下具体用法,然后在来个demo演示,其实我也是这么想的,小编今天花了一天的时间从学习—>解析页面,总算是成果圆满了吧,啊哈,但是, ...

  7. 亿级 Web 系统的容错性建设实践

    一. 重试机制 最容易也最简单被人想到的容错方式,当然就是“失败重试”,总而言之,简单粗暴!简单是指它的实现通常很简单,粗暴则是指使用不当,很可能会带来系统“雪崩”的风险,因为重试意味着对后端服务的双 ...

  8. TeamViewer12.0.71503(远程控制软件)精简版 单文件企业版介绍

    TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...

  9. CentOS7下搭建邮件服务器(dovecot + postfix + SSL)

    CentOS   花了基本上两天的时间去配置CentOS7下的邮件服务器.其中艰辛太多了,一定得总结下. 本文的目的在于通过一系列配置,在CentOS 7下搭建dovecot + postfix + ...

  10. SessionState

    SqlServer方式:1.创建数据库的方法:C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regsql -ssadd -sstype ...