首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

集群环境下的定时任务

定时任务的实现方式有多种,例如JDK自带的Timer+TimerTask方式,Spring 3.0以后的调度任务(Scheduled Task),Quartz框架等。...Timer+TimerTask是最基本的解决方案,但是比较远古了; Spring自带的Scheduled Task是一个轻量级的定时任务调度器,支持固定时间(支持cron表达式)和固定时间间隔调度任务...,支持线程池管理; Quartz是一个功能完善的任务调度框架; 利用如上方式都可以轻松实现定时任务功能,这些实现方式在单台应用服务器上部署运行是完全没有问题的,但是有时候我们的项目不是部署在一台机器上的...,而是在一个集群环境上,即当应用服务器从单机扩展至多台集群模式时,原来的定时任务调度方案肯定就行不通了,因为我们的预期一定是在某一时刻触发执行定时任务一次,而不是多次,当我们集群部署后就会造成定时任务被多次执行...所以我们就需要思考如何解决在集群环境下定时任务被多次执行的问题?

2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux定时任务访问页面代替Quartz集群

    业务背景: web中经常有业务需要定时执行,但是在集群环境中,如果多个服务器中的定时任务同时开启的话会导致数据库挂掉,实际应该中只有一个定时任务访问数据库。...怎么解决这一问题呢: 1、多服务器集群时,目录挂载。只有一台服务器存放定时任务,挂载时排除定时任务的配置文件,只让一台服务器开启定时任务。...2、单独部署一台服务器,用来跑定时任务 3、使用linux脚本,访问集群服务器页面或action,肯定有一台服务器接收到请求,然后执行定时。...首先,配置linux定时任务: vi /etc/crondtab 0 1 * * * root /dbdata/backup/cms/async.sh 然后是async.sh中,如果请求出错就发邮件报警

    90910

    Java通过redis管理你的集群定时任务

    前言 早在实习的时候,笔者就接触了spring-task和quartz框架,相信任何java程序员都会有定时任务的需求,在单机上使用定时任务是非常简单的,但是在集群环境中就显得比较棘手: 如何限定只有一台机器在执行定时任务...某台服务宕机以后如何进行故障转移 如何确定正在执行的是哪一台服务 此问题官方肯定有解决方案,资料也不少:quartz集群分布式(并发)部署解决方案-Spring 不过笔者是个比较懒的人,上述的解决方案需要配置不少的...quartz表,并且业务里不需要动态配置定时任务,对quartz框架并无依赖,所以就考虑使用其他方式来实现定时任务的分布式调度。...有兴趣的同学可以了解下:分布式任务调度组件 Uncode-Schedule 所幸在填坑过程中对这个任务调度的过程有了一定了解,于是决定自己实现一个简单的任务调度器。...进去,设置一定时间的有效期,并执行定时任务;如果不为空,判断是否与本机ip相同,相同则执行定时任务,否则跳过 设置有效期是为了某台机器发生故障时能进行故障转移 核心流程代码 此解决方案非常简单,核心代码也十分容易集成

    2.1K60

    Java应用集群下的定时任务处理方案(mysql)

    今天来说一个Java多机部署下定时任务的处理方案。 需求: 有两台服务器同时部署了同一套代码, 代码中写有spring自带的定时任务,但是每次执行定时任务时只需要一台机器去执行。...只在一台机器上部署定时任务的代码。 最后两个方案又都被自己否决了。 第一条,如果指定ip的机器出现了问题怎么办? 例如说宕机了, 那么该制定ip的机器上的定时任务是不是就无法运行了?..., 两个定时任务都是项目启动后每隔一分钟执行一次。...然后看看这个listCar中的代码: //定时任务的名称, 这个和数据库中的task_name是保持一致的, 保证要执行该定时任务。...当然还有更多很好地解决方案, 我这里秉承的是最简单的处理方式, 如果大家对我这个方案有疑问或者做的不好的地方都希望大家能够提出来, 谢谢了, 最后贴上两个其他的解决方案: Java通过redis管理你的集群定时任务

    1.9K80

    定时任务

    前言 ---- 如标题所示,本文要讲的就是定时任务定时任务在某些场景下是必不可少的存在。...延时是相对而言的,比如 setTimeout、setInterval、setImmediate 这些其实是在某个特定的事件执行完之后设定一个延时以执行下一个任务,并不是指定的现实中的具体的时间。...cron ---- 提到定时任务,不得不说说 cron ,百度百科上说的很清楚,Linux 系统的内置服务,定时执行工具。 定时格式 * * * * * :这五个星号具体的含义下图说的很清楚了。...这里之所以要提 cron ,主要是因为大量的实现定时任务的第三方库都形似与此( 注意是形似 ),其实就是这几个星号。...node-schedule ---- 在 node 中实现定时任务的比较出名的有以下几个:later、agenda、node-cron、node-schedule ,当然我选取了 node-schedule

    2.4K40

    定时任务莫名停止,Spring 定时任务存在 Bug??

    通过同事反馈的日志,发现拉取流水定时任务没有执行,进一步查看,小黑哥发现整个系统其他的定时任务也都停止了。。。 这真是一个奇怪的的问题,这好端端的定时任务怎么会突然停止?...深入排查 虽然问题解决了,但是小黑哥心里还是存在一个疑惑,为何一个定时任务发生了阻塞,就会影响执行其他定时任务。...另外从上面可以看到,上述两个定时任务都由 pool-1-thread-1线程执行。从这点可以看出 Spring 定时任务将会交给线程池执行。...所以一旦某一个定时任务长时间阻塞这个执行线程,其他定时任务都将被影响,没有机会被执行线程执行。 Spring 这种默认配置,在需要执行多个定时任务的情况,可能会是一个坑。...,将会影响其他定时任务执行 如果存在多个定时任务,为了保证定时任务执行时间的准确性,可以修改默认配置,使其使用多线程执行定时任务 面对偶发的失败,我们可以采用重试补偿策略,不过这里切记设置合适的最大重试次数

    2.9K11

    linux定时任务

    linux定时任务在一般情况下是默认启动的,通过crontab命令去控制 crontab默认配置文件 一般情况下,定时任务的配置文件,都在/etc/crontab文件中: ?...图为某系统默认的定时任务,可看出,根据不同的任务规则,执行了不同的任务,里面的配置大概分为以下几种: cat /etc/crontab SHELL=/bin/bash  # 第一行SHELL变量指定了系统要使用哪个...用户自定义的定时任务,将保存在/var/spool/cron/crontabs/文件夹中,文件根据用户名进行命名: ?...crontab   -u  指定crontab的用户,如果不使用该参数,则默认为当前用户 crontab    -l   输出用户的 crontab文件配置 crontab   -e   编辑用户的定时任务文件...从刚刚的那些内容我们可以看到,定时任务的前面是5段内容,用空格分开,后面是执行的命令,现在我们讲一讲这5段内容代表的意义 这5段内容分别代表了“分,时,日,月,周” 5种规则,例如: * * * *

    13.8K10

    Spring 定时任务

    在程序中常常有定时任务的需求,例如每隔一周生成一次报表、每个月月末清空用户积分等等。Spring也提供了相应的支持,我们可以非常方便的按时执行任务。...所以定时任务功能既可以在命令行程序中使用,也可以在Java Web程序中使用。当然后者可能使用的更广泛一些(毕竟Web程序需要一直运行的嘛)。 这里我们定义两个任务,后面会让它们可以定时执行。...而且好像Spring不支持第二个星期一这样的定时器设置,所以如果有这样的需求,需要使用Quartz。 配置任务 任务配置既可以使用Java配置,也可以使用XML配置。...我们需要在配置类上添加@EnableScheduling,如果需要异步的定时任务,还需要添加@Async。...XML配置 Spring提供了task命名空间,让配置定时任务非常简单。 定时器 task:scheduler会注册一个ThreadPoolTaskScheduler定时器,它只有一个属性线程池大小。

    94021

    Java定时任务

    在java中一个完整定时任务需要由Timer、TimerTask两个类来配合完成。 API中是这样定义他们的,Timer:一种工具,线程用其安排以后在后台线程中执行的任务。...我们可以这样理解Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,而TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。...但是由于每一个Timer对象对应的是单个后台线程,用于顺序执行所有的计时器任务,一般情况下我们的线程任务执行所消耗的时间应该非常短,但是由于特殊情况导致某个定时任务执行的时间太长,那么他就会“独占”计时器的任务执行线程...执行结果为: 指定时间time=Tue Jun 10 11:39:00 CST 2014指定时间执行线程任务… 在延迟指定时间后以指定的间隔时间循环执行定时任务 public class TimerTest03...Timer的缺陷 Timer的缺陷 Timer计时器可以定时(指定时间执行任务)、延迟(延迟5秒执行任务)、周期性地执行任务(每隔个1秒执行任务),但是,Timer存在一些缺陷。

    2K20

    Java 定时任务

    还没真正的遇到使用定时任务的场景,不管怎么说先学起来 1. 定时任务 很多情况下任务并非需要立即执行,而是需要往后或定期执行,这不可能人工去操作,所以定时任务就出现了。...项目中肯定会用到使用定时任务的情况,笔者就需要定时去拉取埋点数据 使用定时任务的情况: 每周末凌晨备份数据 触发条件 5 分钟后发送邮件通知 30 分钟未支付取消订单 每 1 小时去拉取数据 ........,之前还写过定时的探测任务 5....执行器就是定时任务,而调度中心则负责管理调用这些定时任务,调度中心也可以存储定时任务通过脚本形式(Java 是 Grovvy)免编译地实时下发到各服务中执行。...在需要定时任务的服务中 引入依赖、添加配置、创建定时任务 6.3.1 依赖 <!

    2.9K30
    领券