作者 | 郭朝兴

责编 | Elle

最近在项目开发中进行了一些Spring定时任务的开发工作,在开发过程中对Spring定时任务的配置方式进行了一些研究,现在对各种配置方式进行一个总结。Scheduled是Spring支持的定时任务配置方式,可以用注解或者配置文件的方式进行配置。

Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,它是一个开源的由OpenSymphony维护的项目,开发者能够在Java EE,或单独的Java SE应用中使用它。无论是简单的任务调度,还是复杂的企业级应用,Quartz都能够很好地胜任。

Quartz支持CronTriggerBean,SimpleTriggerBean两种模式,CronTriggerBean比 SimpleTriggerBean功能更强大,它能够控制任务执行的精确时间,比如,早上九点半需要执行某QuartzJobBean中给定的任务。

以下对不同的配置方式分别进行介绍。

通Scheduled注解或者xml配置的方式添加定时任务

ref 是定时任务的类在 Spring中的beanName,method是要执行的方法,fixed-delay 是上一个调用完成后,再次调用的延时,fixed-rate 是 上一个调用开始后,再次调用的延时(不用等待上一次调用完成),cron 是表达式,表示在什么时候进行任务调度。

也可以采用注解的方式,在需要配置为定时任务的方法上添加@Scheduled(cron = "0 0 3 * * ?"),cron为定时任务表达式,cron表达式支持非常丰富的配置规则。

@Component(“taskJob”) public class TaskJob { k@Scheduled(cron = "0 0 3 * * ?")public void job1 {System.out.println(“任务进行中。。。”);}}

配置任务执行的线程池信息。task:scheduler用来配置任务调度线程池大小,调度线程在被调度任务完成前不会空闲;task:executor用来配置任务执行器的具体参数,pool-size 可以指定执行线程池的初始大小、最大大小,queue-capacity配置等待执行任务的队列容量,reject-policy当等待队列爆了时的策略,分为丢弃、有任务执行器直接执行等方式。

 

CronTrigger配置方式

CronTrigger 支持比simpleTrigger更具体的调度,CronTrigger支持类似日历的重复间隔。CronTrigger 由MethodInvokingJobDetailFactoryBean、CronTriggerFactoryBean两个类支持。

MethodInvokingJobDetailFactoryBean配置需要定时执行的任务类和方法,targetObject为执行定时任务的bean,targetMethod为执行定时任务的bean中的方法。CronTriggerFactoryBean为定时任务的触发器,用来配置定时任务执行的时间表达式。

 class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

SimpleTigger配置方式

当需要在规定的时间执行一次或者以一定的时间间隔重复出发执行job时,SimpleTrigger 就可以满足要求。SimpleTrigger的属性有:开始时间、结束时间、重复次数、重复时间间隔。

如下示例:首先创建需要执行定时任务的bean,名字为quartzBean。然后配置该bean需要定时执行的方法。Concurrent参数用来配置是否同步执行。如果配置为true,则任务执行时,只有上次执行完成后,才可以进入下一次执行。

SimpleTriggerFactoryBean配置了触发器执行的策略,开始执行的延迟时间及执行的时间间隔。SchedulerFactoryBean用来管理任务计划,是任务的总的管理类。将lazy-init='false'那么容器启动就会执行调度程序。

 

class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">300000">

SimpleTrigger与CronTrigger高级应用场景

针对需要将定时任务配置为根据用户的实际运行需要,动态调整任务执行的计划,并准实时生效的情况。可以采用配置页面的方式由用户选择任务的执行计划,然后将各个任务的执行计划添加到数据库中。周期性的从数据库中读取定时任务信息,添加、更新、删除定时任务线程。

当Spring 启动时,就会创建schedulerManager作为总的管理类,由schedulerManager来管理所有的任务,schedulerManager在后台每隔一定的时间(配置)执行一次,来监测数据库中需要创建和更新的定时任务。

schedulerManager读取数据库中的定时任务(任务类、任务方法、执行时间),判断定时触发器中是否存在该任务,如果存在,比较数据库中的任务表达式(cron)是否与当前定时器中的时间一致,如果不一致,更新当前任务时间表达式。如果不存在该任务,将任务加入到定时器中。

此种方式创建任务也是基于MethodInvokingJobDetailFactoryBean,CronTriggerFactoryBean 两个类,但是创建方式为通过代码进行实例化,可以根据实际需要动态的创建,灵活性更加强,使用起来也更加的方便,创建任务有2个步骤,具体如下:

(1)实例化任务

首先实例化MethodInvokingJobDetailFactoryBean,MethodInvokingJobDetailFactoryBean是spring自带的,并将数据库中配置的job相关信息添加到mijdfb,然后调用afterPropertiesSet方法,这个方法会实例化一个JobDetailImpl,并将相应的信息添加到JobDetailImpl中。该过程实例化了需要定时调度的类和方法,并可以向类和方法中传入制定的参数,使用配置文件的方式无法达到对应的效果。

MethodInvokingJobDetailFactoryBean mijdfb=new MethodInvokingJobDetailFactoryBean;mijdfb.setName(qm.getEnvId);mijdfb.setTargetObject(beanFactory.getBean("service

@scheduled注解配置时间_探究 Spring 的定时任务配置相关推荐

  1. 探究 Spring 的定时任务配置

    作者 | 郭朝兴 责编 | Elle 出品 | CSDN(ID:CSDNnews) 最近在项目开发中进行了一些Spring定时任务的开发工作,在开发过程中对Spring定时任务的配置方式进行了一些研究 ...

  2. @scheduled注解配置时间_@Scheduled注解

    1 概述 @Scheduled注解是spring boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行.注意需要配合@EnableScheduling使用,配 ...

  3. @scheduled注解配置时间_「玩转SpringBoot」用好条件相关注解,开启自动配置之门...

    封面图自动配置隐含两层含义,要搞清楚 上帝让程序员的发量减少,是为了让他变得更聪明,如果有一天聪明到了极点,那就是绝顶聪明. 据说在大脑高速运转下,这样更有利于散热,不至于核心温度过高而产生告警. 聪 ...

  4. nacos 配置动态刷新_使用 Spring Cloud Alibaba Nacos Config 作为配置中心

    什么是 Nacos Config 在分布式系统中,由于服务数量巨多,为了方便服务 配置文件统一管理,实时更新,所以需要分布式配置中心组件. Spring Cloud Alibaba Nacos Con ...

  5. java取消 验证_使用Spring Security Java配置时禁用基本身份验证

    我正在尝试使用Spring Security Java配置保护Web应用程序的安全. 这是配置的样子: @Configuration @EnableWebMvcSecurity public clas ...

  6. python consul配置中心_微服务注册发现配置中心-consul

    Consul详解 近期在微服务业务中用的注册中心,在此简单记录下以备后用. 一 概述 1.1 概念 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.Con ...

  7. java+spring+mysql配置_用spring的beans配置mysql数据库

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www. ...

  8. eigrp配置实验_路由器 OSPF 动态路由配置

    本文档详细介绍路由器 OSPF 动态路由配置的方法,文内含长段代码可复制可往左滑,希望对大家有帮助! 实验目的 掌握 OSPF 协议的配置方法 掌握查看通过动态路由协议 OSPF 学习产生的路由 熟悉 ...

  9. spring+quartz定时任务配置---MethodInvokingJobDetailFactoryBean

    实现定时任务有两种方式: jobDetail -JobDetailBean jobDetail -MethodInvokingJobDetailFactoryBean 这里呢先讲的是MethodInv ...

最新文章

  1. asp从后台调出的公式怎么参与运算_SEOr怎么写一个快速排名的标题
  2. 产品经理这个岗位是否真的可有可无?
  3. 完全二叉树的JAVA实现(以及非递归遍历方法)
  4. 编写一个爬虫类库——(一)想法
  5. 使用requests模块简单获取数据
  6. 解题: SDOI 2011 染色
  7. linux tar进行归档压缩和解压
  8. 20151008_Android Application类
  9. Linux 下获取 IP 和 MAC Adr 的方法
  10. [python] linspace():获取等间隔数组
  11. 端口截听实现端口隐藏 嗅探与攻击
  12. 如何用文献管理软件Endnote X9插入参考文献
  13. Android 视频压缩
  14. 什么是千兆级LTE?带你了解5G网络之前最重要的通信创新
  15. 图像风格迁移cvpr2020_CVPR 2020 论文大盘点-文本图像篇
  16. 查看oracle负载过大的原因,Oracle备份时系统负载过高导致ORA-3136错误和AIX系统的3D32B80D错误...
  17. 基于51单片机的智能汽车雨刷控制系统方案原理图程序设计
  18. mybatis-Springboot配置多数据源出现错误记录
  19. Web自动化测试实战(二)
  20. word 2010中设置默认粘贴为 只保留文本粘贴【visio也适用于快捷键方式】

热门文章

  1. layui表格获取不到多层数据的解决方案
  2. Golang1.13.x 解决go get 无法下载问题
  3. Debian 9.x “stretch“ 解决 /etc/rc.local 开机启动问题
  4. [字符编码]Invalid byte 1 of 1-byte UTF-8 sequence终极解决方案
  5. Tomcat参数设置,解决内存溢出问题
  6. 从该函数中确定函数名称(不使用回溯)
  7. 原生js实现Ajax,JSONP
  8. PHP如何防止XSS攻击
  9. 修行的心态,积极的态度
  10. java ldap 登陆AD域 查找某个帐号 查找某个组织单位