package main

import (
"github.com/gorhill/cronexpr"
"fmt"
"time"
) func main(){
var(
expr *cronexpr.Expression
err error
now time.Time
nextTime time.Time
) //if expr,err = cronexpr.Parse("* * * * *");err != nil{
// fmt.Println(err)
// return
//}
//expr = expr if expr,err = cronexpr.Parse("* * * * *");err !=nil{
fmt.Println(err)
return
}
expr = expr now = time.Now()
nextTime = expr.Next(now)
fmt.Println(now,nextTime) time.AfterFunc(nextTime.Sub(now), func() {
fmt.Println("被调度了:",nextTime)
}) time.Sleep(*time.Second)
}
-- ::25.7892266 + CST m=+0.017000401 -- :: + CST
被调度了: -- :: + CST Process finished with exit code

调度多个cron任务

package main

import (
"github.com/gorhill/cronexpr"
"fmt"
"time"
)
//代表一个任务
type CronJob struct {
expr *cronexpr.Expression
nextTime time.Time//expr.Next(Now)
} func main(){
//需要有一个调度协程 它定时检查所有的cron任务 谁过期就执行谁
var(
expr *cronexpr.Expression
now time.Time
cronJob *CronJob
scheduleTable map[string]*CronJob //key:任务名字
) scheduleTable = make(map[string]*CronJob) now = time.Now() //1定义两个cronjob
expr = cronexpr.MustParse("*/5 * * * * * *")
cronJob = &CronJob{
expr:expr,
nextTime:expr.Next(now),
} scheduleTable["job1"] = cronJob expr = cronexpr.MustParse("*/5 * * * * * *")
cronJob = &CronJob{
expr:expr,
nextTime:expr.Next(now),
} scheduleTable["job2"] = cronJob go func() {
var(
jobName string
cronJob *CronJob
now time.Time
)
//定时检查一下任务调度表
for{
now = time.Now()
for jobName ,cronJob = range scheduleTable{
if cronJob.nextTime.Before(now) || cronJob.nextTime.Equal(now){
go func(jobName string) {
fmt.Println("执行:",jobName)
}(jobName)
cronJob.nextTime = cronJob.expr.Next(now)
fmt.Println("下次执行时间:",cronJob.nextTime)
}
} //睡眠100毫秒
select {
case <-time.NewTimer(*time.Millisecond).C://1将在100毫秒可读 返回 }
}
}() time.Sleep(time.Second*) }
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
执行: job2
执行: job1
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
执行: job2
执行: job1
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
执行: job1
执行: job2
下次执行时间: -- :: + CST
执行: job1
执行: job2
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
执行: job1
执行: job2
下次执行时间: -- :: + CST
执行: job2
下次执行时间: -- :: + CST
执行: job1

cronexpr任务调度的更多相关文章

  1. .net 分布式架构之任务调度平台

    开源地址:http://git.oschina.net/chejiangyi/Dyd.BaseService.TaskManager .net 任务调度平台 用于.net dll,exe的任务的挂载, ...

  2. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  3. Spring Quartz实现任务调度

    任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...

  4. Quartz实现任务调度

    一.任务调度概述 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作,任务调度涉及多线程并发. ...

  5. 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度

    http://www.cnblogs.com/bobositlife/p/aspnet-mvc-csharp-quartz-net-timer-task-scheduler.html 在之前的文章&l ...

  6. Quartz任务调度基本使用

    转自:http://www.cnblogs.com/bingoidea/archive/2009/08/05/1539656.html 上一篇:定时器的实现.Java定时器Timer和Quartz介绍 ...

  7. 从零开始学 Java - Spring 使用 Quartz 任务调度定时器

    生活的味道 睁开眼看一看窗外的阳光,伸一个懒腰,拿起放在床一旁的水白开水,甜甜的味道,晃着尾巴东张西望的猫猫,在窗台上舞蹈.你向生活微笑,生活也向你微笑. 请你不要询问我的未来,这有些可笑.你问我你是 ...

  8. #研发中间件介绍#定时任务调度与管理JobCenter

    郑昀 最后更新于2014/11/11 关键词:定时任务.调度.监控报警.Job.crontab.Java 本文档适用人员:研发员工   没有JobCenter时我们要面对的:   电商业务链条很长,业 ...

  9. #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie

    郑昀 创建于2014/10/30 最后更新于2014/10/31   一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...

随机推荐

  1. JVM系列(四)— 原子性、可见性与有序性

    上一篇讲了Java内存模型的相关知识,模型设计正是围绕着并发过程中如何处理原子性,可见性和有序性这3个特征来建立的 一.原子性(Atomicity) 原子性的概念无需多说,熟悉事物的4个特性的应该比较 ...

  2. AIO异步非阻塞学习

    Client:客户端 package aio; import java.io.UnsupportedEncodingException; import java.net.InetSocketAddre ...

  3. [Ceoi2010]Pin

    #2012. [Ceoi2010]Pin Online Judge:Bzoj-2012 Label:容斥,STL 题目描述 给出N(2<=N<=50000)个长度为4的字符串,问有且仅有D ...

  4. Leetcode240. Search a 2D Matrix II搜索二维矩阵2

    编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 matrix ...

  5. centos Python2.6 升级到2.7

    需求: centos 6.x 系统默认Python 版本都是2.6,实际生产环境中需要用到Python 2.7.x Python 2.7 下载地址 [root@ansible package]# wg ...

  6. leyou_03_cors解决ajax的跨域请求问题

    1.为什么会有跨域问题 因为跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是与当前页域名相同的路径,这能有效的阻止跨站攻击. 因此:跨域问题 是针对ajax的一种限制 ...

  7. ArrayList基础知识

    ArrayList简介 ArrayList 的底层是数组队列,相当于动态数组.与 Java 中的数组相比,它的容量能动态增长.在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ...

  8. Vue.之.回到顶部

    Vue.之.回到顶部 当页面出现上下滚动条时,页面右下角出现回到顶部功能. 在页面上添加如下DIV(写的CSS内部样式),这个DIV功能:出现滚动条往下滑动,就显示出来,反之隐藏.点击DIV快速回到顶 ...

  9. groups 用户所归属的用户组查询

    groups 用法很简单,就是查询用户所归属哪个或哪些用户组: 语法格式:  groups  用户名 实例: [beinan@localhost ~]$ groups beinan  注:查询bein ...

  10. mybatis学习:mybatis的注解开发和编写dao实现类的方式入门

    一.使用注解则不需要创建映射配置文件:即xxxDao.xml javaBean为什么要实现Serializable接口? Java的"对象序列化"能让你将一个实现了Serializ ...