关于定时触发任务,遇到难题了,求思路,200分送上~

时间:2023-01-25 07:55:59
客户要求可以自己去制定一些任务,这些任务在制定的时候会包括触发周期(一次,每天,每周,每月),任务的具体内容是存在A表中的。

每次到了需要触发任务的时间,就从A表读取需要的字段(比如:任务ID),插入到B表中,接受任务的人就可以看到自己的任务了

听起来和WindowsTask很相像。

难题在这里:触发周期会不一样,该怎么计算触发时间?
-------------------------------------------------------当前表单设计可以获取到的内容------------------------------------------------------------
一次型任务会要求用户输入日期,时间(整点,24小时制);
每天型任务要求用户输入的只有时间;

这两个都容易,比较需求时间和当前时间就行,一个where条件就过滤出来了

每周型任务需要用户输入的是周几,时间;
每月型任务需要输入的是每月的几号(纯数字),时间(这个貌似就要去判断月份并且限制输入范围了)
------------------------------------------------------------------------------------------------------------------------------------------------------------
根据获取到的内容,可以计算下一个触发事件么?

当前思路,写一个页面用来往B表插入数据,然后就用WindowsTask去触发IE并访问这个页面的地址。
但是每个任务的周期不一样,就得写好多页面。对于这个需求不可行。

或者利用sqlserver的作业,设置每天去执行。然后判断哪些记录到了触发时间,可是这个触发时间和下一个触发时间又不好计算。

如果有好的思路或者办法,请不吝赐教
关于定时触发任务,遇到难题了,求思路,200分送上~关于定时触发任务,遇到难题了,求思路,200分送上~关于定时触发任务,遇到难题了,求思路,200分送上~关于定时触发任务,遇到难题了,求思路,200分送上~

59 个解决方案

#1


关于定时触发任务,遇到难题了,求思路,200分送上~

琪琪,我的数据库的书写触发器的正在这里,我帮你先找找哈

#2


关于定时触发任务,遇到难题了,求思路,200分送上~

#3


引用 1 楼 peri11 的回复:
琪琪,我的数据库的书写触发器的正在这里,我帮你先找找哈
难点不是怎么触发,是什么时候触发~ 关于定时触发任务,遇到难题了,求思路,200分送上~

#4


琪琪,你要解决时间周期的话,可以试试数据库里的代理作业

#5


引用 4 楼 tangshaoqing123 的回复:
琪琪,你要解决时间周期的话,可以试试数据库里的代理作业
我知道代理作业呢,可是在代理作业里面也要计算触发时间呀,每周,每月的,都不一样呢~

#6


如果没办法的话,只能去多做几个代理作业了呢~

这样就一次性把触发的时刻写死了,不能让用户去定义了~

#7


引用 1 楼 peri11 的回复:
关于定时触发任务,遇到难题了,求思路,200分送上~

琪琪,我的数据库的书写触发器的正在这里,我帮你先找找哈
关于定时触发任务,遇到难题了,求思路,200分送上~
原来师太也是技术人员. 关于定时触发任务,遇到难题了,求思路,200分送上~

#8


我觉得你应该把帖子发到SQL Server区,请教版主黄钊吉

#9


引用 6 楼 laq616853363 的回复:
如果没办法的话,只能去多做几个代理作业了呢~

这样就一次性把触发的时刻写死了,不能让用户去定义了~

用户定义的时间?不能记录之后存入A表么?

#10


引用 9 楼 a01589 的回复:
用户定义的时间?不能记录之后存入A表么?
存入数据表当然可以,存入是是个周期性时间,不是具体的一个时间点,这个点触发了,还得去计算下一个点~

#11


引用 10 楼 laq616853363 的回复:
Quote: 引用 9 楼 a01589 的回复:
用户定义的时间?不能记录之后存入A表么?
存入数据表当然可以,存入是是个周期性时间,不是具体的一个时间点,这个点触发了,还得去计算下一个点~

我感觉难点在于这个“周期性”,是用户指定当前的点,然后下个点根据几天来算?比如说:用户输入2014-3-12有任务,然后下个点就是8天后?或者说10天后?需求是不是这样的

#12


三个字段控制,一个任务发起时间,一个循环方式,一个已执行次数
判断 任务发起时间+循环方式(例如每两天执行一次,就是2)*已执行次数<当前系统时间    则发起任务
按周循环的也类似,就是已执行次数中要加入本周已执行过的日期的或值,执行完本周最后一次后再把已执行次数加1
按月的道理一样,中间会用到一些关于时间的算法

#13


引用 12 楼 bigbaldy 的回复:
三个字段控制,一个任务发起时间,一个循环方式,一个已执行次数
判断 任务发起时间+循环方式(例如每两天执行一次,就是2)*已执行次数<当前系统时间    则发起任务
按周循环的也类似,就是已执行次数中要加入本周已执行过的日期的或值,执行完本周最后一次后再把已执行次数加1
按月的道理一样,中间会用到一些关于时间的算法
这个貌似不错,我试试~

#14


引用 11 楼 a01589 的回复:
我感觉难点在于这个“周期性”,是用户指定当前的点,然后下个点根据几天来算?比如说:用户输入2014-3-12有任务,然后下个点就是8天后?或者说10天后?需求是不是这样的
周期性是下拉框给用户选择的,每天的某个时刻,或者每周的某天的某个时刻,再或者每月某天的某个时刻

#15


如果给任务表加上两个字段: 触发周期, 上次触发时间.

计划任务依然是每天运行并且读取所有任务, 如果发现有任务的  触发周期 <= 当前时间 - 上次触发时间 时, 进行任务分配工作.

这个方案是否可行?

#16


不懂 关于定时触发任务,遇到难题了,求思路,200分送上~

#17


引用 15 楼 windwolfer 的回复:
如果给任务表加上两个字段: 触发周期, 上次触发时间.

计划任务依然是每天运行并且读取所有任务, 如果发现有任务的  触发周期 <= 当前时间 - 上次触发时间 时, 进行任务分配工作.

这个方案是否可行?
貌似比12楼的方法还要容易操作一点呢,多谢~

#18


又想了一下, 把上次触发时间改成下次运行时间更好.

对于1次性任务, 触发周期写成0就可以.

然后写一个后台扫描程序定时查看表A, 当有数据行的下次运行时间到达并且非一次性任务

更新表A下次运行时间=下次运行时间+触发周期, 同时向表B插入数据

#19


你这个帖子吸引了这么多水源的人 关于定时触发任务,遇到难题了,求思路,200分送上~

#20


引用 18 楼 windwolfer 的回复:
又想了一下, 把上次触发时间改成下次运行时间更好.

对于1次性任务, 触发周期写成0就可以.

然后写一个后台扫描程序定时查看表A, 当有数据行的下次运行时间到达并且非一次性任务

更新表A下次运行时间=下次运行时间+触发周期, 同时向表B插入数据
考虑到资源问题,还是不在后台写定时了。就写一个代理作业,设置为每天某个时间点去执行~

你的两个思路一个是记录上次处理时间,另一个是计算下次处理时间,都不错。
接下来我要研究的就是sqlserver里面的时间算法咯
毕竟12个月的每个月天数都不一样呢

#21


引用 19 楼 a01589 的回复:
你这个帖子吸引了这么多水源的人 关于定时触发任务,遇到难题了,求思路,200分送上~
都是我自己前面灌水太久了~

你怎么会知道他们混水区呢?

#22


引用 21 楼 laq616853363 的回复:
Quote: 引用 19 楼 a01589 的回复:

你这个帖子吸引了这么多水源的人 关于定时触发任务,遇到难题了,求思路,200分送上~
都是我自己前面灌水太久了~

你怎么会知道他们混水区呢?

貌似有个是波斯小妖,其实有个通用参考的,就是技术区这边分不是很高……

#23


引用 楼主 laq616853363 的回复:
客户要求可以自己去制定一些任务,这些任务在制定的时候会包括触发周期(一次,每天,每周,每月),任务的具体内容是存在A表中的。

每次到了需要触发任务的时间,就从A表读取需要的字段(比如:任务ID),插入到B表中,接受任务的人就可以看到自己的任务了

听起来和WindowsTask很相像。

难题在这里:触发周期会不一样,该怎么计算触发时间?
-------------------------------------------------------当前表单设计可以获取到的内容------------------------------------------------------------
一次型任务会要求用户输入日期,时间(整点,24小时制);
每天型任务要求用户输入的只有时间;

这两个都容易,比较需求时间和当前时间就行,一个where条件就过滤出来了

每周型任务需要用户输入的是周几,时间;
每月型任务需要输入的是每月的几号(纯数字),时间(这个貌似就要去判断月份并且限制输入范围了)
------------------------------------------------------------------------------------------------------------------------------------------------------------
根据获取到的内容,可以计算下一个触发事件么?

当前思路,写一个页面用来往B表插入数据,然后就用WindowsTask去触发IE并访问这个页面的地址。
但是每个任务的周期不一样,就得写好多页面。对于这个需求不可行。

或者利用sqlserver的作业,设置每天去执行。然后判断哪些记录到了触发时间,可是这个触发时间和下一个触发时间又不好计算。

如果有好的思路或者办法,请不吝赐教
关于定时触发任务,遇到难题了,求思路,200分送上~关于定时触发任务,遇到难题了,求思路,200分送上~关于定时触发任务,遇到难题了,求思路,200分送上~关于定时触发任务,遇到难题了,求思路,200分送上~


spring 定时器

#24


引用 23 楼 yan470925731 的回复:
spring 定时器
完全没用过呢,我得去查查了~

不过貌似记得spring不是java的框架么?

#25


引用 22 楼 a01589 的回复:
貌似有个是波斯小妖,其实有个通用参考的,就是技术区这边分不是很高……
你的分增长得太快了~
.NET技术分已经超过我了 关于定时触发任务,遇到难题了,求思路,200分送上~

#26


引用 20 楼 laq616853363 的回复:
考虑到资源问题,还是不在后台写定时了。就写一个代理作业,设置为每天某个时间点去执行~

你的两个思路一个是记录上次处理时间,另一个是计算下次处理时间,都不错。
接下来我要研究的就是sqlserver里面的时间算法咯
毕竟12个月的每个月天数都不一样呢


简单的办法就是在C#算出时间再传回去. 遇到30直接AddMonths(1)

#27


引用 26 楼 windwolfer 的回复:
简单的办法就是在C#算出时间再传回去. 遇到30直接AddMonths(1)
我也想这样呢~
这样就要在程序里去定时扫描了~

#28


引用 27 楼 laq616853363 的回复:
Quote: 引用 26 楼 windwolfer 的回复:
简单的办法就是在C#算出时间再传回去. 遇到30直接AddMonths(1)
我也想这样呢~
这样就要在程序里去定时扫描了~

程序定时扫描貌似比数据库里要容易点

#29


自己写个windows服务来执行。
或者用现成的:Quartz.NET

#30


引用 28 楼 a01589 的回复:
程序定时扫描貌似比数据库里要容易点
容易太多了,但是貌似这样不太好,不然我的同事们就这么做了~

#31


引用 29 楼 qwertxp 的回复:
自己写个windows服务来执行。
或者用现成的:Quartz.NET
都没用过,都需要去研究~
晚上回去就研究~

ps:这个头像怎么会动的?  我也试过gif的,可是不会动呀

#32


该回复于2014-03-12 16:43:07被管理员删除

#33


这个需求我觉得可以和客户沟通变通下,不要从技术上整死!

#34


引用 33 楼 volte 的回复:
这个需求我觉得可以和客户沟通变通下,不要从技术上整死!
商量过了,客户想在页面上自己维护触发事件。
不想再去设置WindowsTask或者是sqlserver代理作业~

#35


来学习一下大神们的思路
引用 31 楼 laq616853363 的回复:
Quote: 引用 29 楼 qwertxp 的回复:

自己写个windows服务来执行。
或者用现成的:Quartz.NET
都没用过,都需要去研究~
晚上回去就研究~

ps:这个头像怎么会动的?  我也试过gif的,可是不会动呀

#36


我的解决方案:
第一步  定义好任务类型:
   单次执行 type=1
   每周执行 type=2
   每月执行 type=3
   每种类型 都要有个时间点,告诉程序什么时候发布.

第二步  查询当天需要执行的任务:
    每天 0 点的时候 根据这三种任务找出当天需要执行的任务
    若当天有新任务发布,则重新查找一次.

第三步   循环任务列表发布任务:
     然后就是弄个循环 可以是每1分钟一次或者每5分钟一次
     看是否达到发布任务的时间

#37


一种方法是开发一个windows服务,用timer定时调用“待分配任务查询及插入操作”

另一种方法是,利用数据库的定时任务,比如:oracle的JOB   、 Sqlserver的JOB,调用存储过程,执行“待分配任务查询及插入操作”


这里需要注意的是执行周期要尽可能的小,至少小于客户允许的运行周期的一半。

另:加入用户新增任务比较频繁,随着时间推移任务表记录会比较大,你可以考虑将任务表拆分成两个。第一个表存放尚未完成任务记录;第二个表存放已完成任务记录

#38


引用 36 楼 laiyongxin 的回复:
1分钟,5分钟也太频繁了吧~
每天任务好说,每周和每月的,难点在于确定是否到达任务发布时间,并且计算下一次发布时间。

#39


引用 37 楼 cco3322 的回复:
一种方法是开发一个windows服务,用timer定时调用“待分配任务查询及插入操作”

另一种方法是,利用数据库的定时任务,比如:oracle的JOB   、 Sqlserver的JOB,调用存储过程,执行“待分配任务查询及插入操作”


这里需要注意的是执行周期要尽可能的小,至少小于客户允许的运行周期的一半。

另:加入用户新增任务比较频繁,随着时间推移任务表记录会比较大,你可以考虑将任务表拆分成两个。第一个表存放尚未完成任务记录;第二个表存放已完成任务记录


嗯,A表只管存放制定的任务,B表用来记录触发的任务和完成的状态。
我也想利用现成的东西,现在用户是想自己去页面上设置维护任务触发周期和具体的时间点。

#40


可自己单独写个程序呀!即时判断系统时间跟数据库存储时间在执行操作就好了。。

#41


关于定时触发任务,遇到难题了,求思路,200分送上~
女的,上照片就有一大波狼,过来帮你了

#42


关于定时触发任务,遇到难题了,求思路,200分送上~

参考Sql Server 2005 管理->维护计划

#43


引用 38 楼 laq616853363 的回复:
Quote: 引用 36 楼 laiyongxin 的回复:
1分钟,5分钟也太频繁了吧~
每天任务好说,每周和每月的,难点在于确定是否到达任务发布时间,并且计算下一次发布时间。

每1分钟 一次  不会很频繁的, 你可以自己做的测试
比如当天有1000个任务要发布,你每一分钟 执行一次 
for  int i=0;i<1000;i++
这个有什么压力呢

至于第二个问题 你不需要去确认 每周和每月这样任务类型的下一个执行时间,
因为你在定制任务的时候 肯定要有个字段 来存的 比如每周的 为  星期三  星期五 这样
每月的 就存 5号  10号 这样的

你在查询当天需要发布的任务的时候 是需要根据任务类型 分开执行sql的
你要对单次,  每周,  每月 三种类型 分别动态创建 当天的三个sql语句 ,这个语句 也不是很复杂,就是根据当天
计算出 是当月的第几天 ,本周的星期几 然后拼接一下sql就出来了

#44


关于定时触发任务,遇到难题了,求思路,200分送上~

#45


引用 38 楼 laq616853363 的回复:
Quote: 引用 36 楼 laiyongxin 的回复:
1分钟,5分钟也太频繁了吧~
每天任务好说,每周和每月的,难点在于确定是否到达任务发布时间,并且计算下一次发布时间。


还有一种 就是间隔天数是由客户自己定义的 比如 每3天执行一次
这种也很好处理. 我们将他看成是单次执行的,只是在发布任务时去修改一下下次发布的日期,我想这个很容易吧..

#46


Sql Server 2005 打个sp2补丁
关于定时触发任务,遇到难题了,求思路,200分送上~

#47


引用 46 楼 liuchaolin 的回复:
Sql Server 2005 打个sp2补丁
我们用的是2008~

客户不想在sqlserver里面或者WindowsTask里面去维护这个触发周期和具体时间,他想在页面上设置呢~

#48


引用 47 楼 laq616853363 的回复:
Quote: 引用 46 楼 liuchaolin 的回复:

Sql Server 2005 打个sp2补丁
我们用的是2008~

客户不想在sqlserver里面或者WindowsTask里面去维护这个触发周期和具体时间,他想在页面上设置呢~


那只能做服务了,只有服务组件才能实现离线自动触发

#49


引用 48 楼 liuchaolin 的回复:
那只能做服务了,只有服务组件才能实现离线自动触发
难点在于对于触发事件的计算和修改,我打算用sqlserver代理作业定每天去扫描数据,然后计算下一个触发时间,现在正在研究不同类型下下一个触发时间的计算,暂时用18楼那个思路~

多谢啦~

#50


你可以看看quartz的资料,或许能够帮到你;
quartz中的调度器、任务和触发器可以处理你提到的那些东西。

#1


关于定时触发任务,遇到难题了,求思路,200分送上~

琪琪,我的数据库的书写触发器的正在这里,我帮你先找找哈

#2


关于定时触发任务,遇到难题了,求思路,200分送上~

#3


引用 1 楼 peri11 的回复:
琪琪,我的数据库的书写触发器的正在这里,我帮你先找找哈
难点不是怎么触发,是什么时候触发~ 关于定时触发任务,遇到难题了,求思路,200分送上~

#4


琪琪,你要解决时间周期的话,可以试试数据库里的代理作业

#5


引用 4 楼 tangshaoqing123 的回复:
琪琪,你要解决时间周期的话,可以试试数据库里的代理作业
我知道代理作业呢,可是在代理作业里面也要计算触发时间呀,每周,每月的,都不一样呢~

#6


如果没办法的话,只能去多做几个代理作业了呢~

这样就一次性把触发的时刻写死了,不能让用户去定义了~

#7


引用 1 楼 peri11 的回复:
关于定时触发任务,遇到难题了,求思路,200分送上~

琪琪,我的数据库的书写触发器的正在这里,我帮你先找找哈
关于定时触发任务,遇到难题了,求思路,200分送上~
原来师太也是技术人员. 关于定时触发任务,遇到难题了,求思路,200分送上~

#8


我觉得你应该把帖子发到SQL Server区,请教版主黄钊吉

#9


引用 6 楼 laq616853363 的回复:
如果没办法的话,只能去多做几个代理作业了呢~

这样就一次性把触发的时刻写死了,不能让用户去定义了~

用户定义的时间?不能记录之后存入A表么?

#10


引用 9 楼 a01589 的回复:
用户定义的时间?不能记录之后存入A表么?
存入数据表当然可以,存入是是个周期性时间,不是具体的一个时间点,这个点触发了,还得去计算下一个点~

#11


引用 10 楼 laq616853363 的回复:
Quote: 引用 9 楼 a01589 的回复:
用户定义的时间?不能记录之后存入A表么?
存入数据表当然可以,存入是是个周期性时间,不是具体的一个时间点,这个点触发了,还得去计算下一个点~

我感觉难点在于这个“周期性”,是用户指定当前的点,然后下个点根据几天来算?比如说:用户输入2014-3-12有任务,然后下个点就是8天后?或者说10天后?需求是不是这样的

#12


三个字段控制,一个任务发起时间,一个循环方式,一个已执行次数
判断 任务发起时间+循环方式(例如每两天执行一次,就是2)*已执行次数<当前系统时间    则发起任务
按周循环的也类似,就是已执行次数中要加入本周已执行过的日期的或值,执行完本周最后一次后再把已执行次数加1
按月的道理一样,中间会用到一些关于时间的算法

#13


引用 12 楼 bigbaldy 的回复:
三个字段控制,一个任务发起时间,一个循环方式,一个已执行次数
判断 任务发起时间+循环方式(例如每两天执行一次,就是2)*已执行次数<当前系统时间    则发起任务
按周循环的也类似,就是已执行次数中要加入本周已执行过的日期的或值,执行完本周最后一次后再把已执行次数加1
按月的道理一样,中间会用到一些关于时间的算法
这个貌似不错,我试试~

#14


引用 11 楼 a01589 的回复:
我感觉难点在于这个“周期性”,是用户指定当前的点,然后下个点根据几天来算?比如说:用户输入2014-3-12有任务,然后下个点就是8天后?或者说10天后?需求是不是这样的
周期性是下拉框给用户选择的,每天的某个时刻,或者每周的某天的某个时刻,再或者每月某天的某个时刻

#15


如果给任务表加上两个字段: 触发周期, 上次触发时间.

计划任务依然是每天运行并且读取所有任务, 如果发现有任务的  触发周期 <= 当前时间 - 上次触发时间 时, 进行任务分配工作.

这个方案是否可行?

#16


不懂 关于定时触发任务,遇到难题了,求思路,200分送上~

#17


引用 15 楼 windwolfer 的回复:
如果给任务表加上两个字段: 触发周期, 上次触发时间.

计划任务依然是每天运行并且读取所有任务, 如果发现有任务的  触发周期 <= 当前时间 - 上次触发时间 时, 进行任务分配工作.

这个方案是否可行?
貌似比12楼的方法还要容易操作一点呢,多谢~

#18


又想了一下, 把上次触发时间改成下次运行时间更好.

对于1次性任务, 触发周期写成0就可以.

然后写一个后台扫描程序定时查看表A, 当有数据行的下次运行时间到达并且非一次性任务

更新表A下次运行时间=下次运行时间+触发周期, 同时向表B插入数据

#19


你这个帖子吸引了这么多水源的人 关于定时触发任务,遇到难题了,求思路,200分送上~

#20


引用 18 楼 windwolfer 的回复:
又想了一下, 把上次触发时间改成下次运行时间更好.

对于1次性任务, 触发周期写成0就可以.

然后写一个后台扫描程序定时查看表A, 当有数据行的下次运行时间到达并且非一次性任务

更新表A下次运行时间=下次运行时间+触发周期, 同时向表B插入数据
考虑到资源问题,还是不在后台写定时了。就写一个代理作业,设置为每天某个时间点去执行~

你的两个思路一个是记录上次处理时间,另一个是计算下次处理时间,都不错。
接下来我要研究的就是sqlserver里面的时间算法咯
毕竟12个月的每个月天数都不一样呢

#21


引用 19 楼 a01589 的回复:
你这个帖子吸引了这么多水源的人 关于定时触发任务,遇到难题了,求思路,200分送上~
都是我自己前面灌水太久了~

你怎么会知道他们混水区呢?

#22


引用 21 楼 laq616853363 的回复:
Quote: 引用 19 楼 a01589 的回复:

你这个帖子吸引了这么多水源的人 关于定时触发任务,遇到难题了,求思路,200分送上~
都是我自己前面灌水太久了~

你怎么会知道他们混水区呢?

貌似有个是波斯小妖,其实有个通用参考的,就是技术区这边分不是很高……

#23


引用 楼主 laq616853363 的回复:
客户要求可以自己去制定一些任务,这些任务在制定的时候会包括触发周期(一次,每天,每周,每月),任务的具体内容是存在A表中的。

每次到了需要触发任务的时间,就从A表读取需要的字段(比如:任务ID),插入到B表中,接受任务的人就可以看到自己的任务了

听起来和WindowsTask很相像。

难题在这里:触发周期会不一样,该怎么计算触发时间?
-------------------------------------------------------当前表单设计可以获取到的内容------------------------------------------------------------
一次型任务会要求用户输入日期,时间(整点,24小时制);
每天型任务要求用户输入的只有时间;

这两个都容易,比较需求时间和当前时间就行,一个where条件就过滤出来了

每周型任务需要用户输入的是周几,时间;
每月型任务需要输入的是每月的几号(纯数字),时间(这个貌似就要去判断月份并且限制输入范围了)
------------------------------------------------------------------------------------------------------------------------------------------------------------
根据获取到的内容,可以计算下一个触发事件么?

当前思路,写一个页面用来往B表插入数据,然后就用WindowsTask去触发IE并访问这个页面的地址。
但是每个任务的周期不一样,就得写好多页面。对于这个需求不可行。

或者利用sqlserver的作业,设置每天去执行。然后判断哪些记录到了触发时间,可是这个触发时间和下一个触发时间又不好计算。

如果有好的思路或者办法,请不吝赐教
关于定时触发任务,遇到难题了,求思路,200分送上~关于定时触发任务,遇到难题了,求思路,200分送上~关于定时触发任务,遇到难题了,求思路,200分送上~关于定时触发任务,遇到难题了,求思路,200分送上~


spring 定时器

#24


引用 23 楼 yan470925731 的回复:
spring 定时器
完全没用过呢,我得去查查了~

不过貌似记得spring不是java的框架么?

#25


引用 22 楼 a01589 的回复:
貌似有个是波斯小妖,其实有个通用参考的,就是技术区这边分不是很高……
你的分增长得太快了~
.NET技术分已经超过我了 关于定时触发任务,遇到难题了,求思路,200分送上~

#26


引用 20 楼 laq616853363 的回复:
考虑到资源问题,还是不在后台写定时了。就写一个代理作业,设置为每天某个时间点去执行~

你的两个思路一个是记录上次处理时间,另一个是计算下次处理时间,都不错。
接下来我要研究的就是sqlserver里面的时间算法咯
毕竟12个月的每个月天数都不一样呢


简单的办法就是在C#算出时间再传回去. 遇到30直接AddMonths(1)

#27


引用 26 楼 windwolfer 的回复:
简单的办法就是在C#算出时间再传回去. 遇到30直接AddMonths(1)
我也想这样呢~
这样就要在程序里去定时扫描了~

#28


引用 27 楼 laq616853363 的回复:
Quote: 引用 26 楼 windwolfer 的回复:
简单的办法就是在C#算出时间再传回去. 遇到30直接AddMonths(1)
我也想这样呢~
这样就要在程序里去定时扫描了~

程序定时扫描貌似比数据库里要容易点

#29


自己写个windows服务来执行。
或者用现成的:Quartz.NET

#30


引用 28 楼 a01589 的回复:
程序定时扫描貌似比数据库里要容易点
容易太多了,但是貌似这样不太好,不然我的同事们就这么做了~

#31


引用 29 楼 qwertxp 的回复:
自己写个windows服务来执行。
或者用现成的:Quartz.NET
都没用过,都需要去研究~
晚上回去就研究~

ps:这个头像怎么会动的?  我也试过gif的,可是不会动呀

#32


该回复于2014-03-12 16:43:07被管理员删除

#33


这个需求我觉得可以和客户沟通变通下,不要从技术上整死!

#34


引用 33 楼 volte 的回复:
这个需求我觉得可以和客户沟通变通下,不要从技术上整死!
商量过了,客户想在页面上自己维护触发事件。
不想再去设置WindowsTask或者是sqlserver代理作业~

#35


来学习一下大神们的思路
引用 31 楼 laq616853363 的回复:
Quote: 引用 29 楼 qwertxp 的回复:

自己写个windows服务来执行。
或者用现成的:Quartz.NET
都没用过,都需要去研究~
晚上回去就研究~

ps:这个头像怎么会动的?  我也试过gif的,可是不会动呀

#36


我的解决方案:
第一步  定义好任务类型:
   单次执行 type=1
   每周执行 type=2
   每月执行 type=3
   每种类型 都要有个时间点,告诉程序什么时候发布.

第二步  查询当天需要执行的任务:
    每天 0 点的时候 根据这三种任务找出当天需要执行的任务
    若当天有新任务发布,则重新查找一次.

第三步   循环任务列表发布任务:
     然后就是弄个循环 可以是每1分钟一次或者每5分钟一次
     看是否达到发布任务的时间

#37


一种方法是开发一个windows服务,用timer定时调用“待分配任务查询及插入操作”

另一种方法是,利用数据库的定时任务,比如:oracle的JOB   、 Sqlserver的JOB,调用存储过程,执行“待分配任务查询及插入操作”


这里需要注意的是执行周期要尽可能的小,至少小于客户允许的运行周期的一半。

另:加入用户新增任务比较频繁,随着时间推移任务表记录会比较大,你可以考虑将任务表拆分成两个。第一个表存放尚未完成任务记录;第二个表存放已完成任务记录

#38


引用 36 楼 laiyongxin 的回复:
1分钟,5分钟也太频繁了吧~
每天任务好说,每周和每月的,难点在于确定是否到达任务发布时间,并且计算下一次发布时间。

#39


引用 37 楼 cco3322 的回复:
一种方法是开发一个windows服务,用timer定时调用“待分配任务查询及插入操作”

另一种方法是,利用数据库的定时任务,比如:oracle的JOB   、 Sqlserver的JOB,调用存储过程,执行“待分配任务查询及插入操作”


这里需要注意的是执行周期要尽可能的小,至少小于客户允许的运行周期的一半。

另:加入用户新增任务比较频繁,随着时间推移任务表记录会比较大,你可以考虑将任务表拆分成两个。第一个表存放尚未完成任务记录;第二个表存放已完成任务记录


嗯,A表只管存放制定的任务,B表用来记录触发的任务和完成的状态。
我也想利用现成的东西,现在用户是想自己去页面上设置维护任务触发周期和具体的时间点。

#40


可自己单独写个程序呀!即时判断系统时间跟数据库存储时间在执行操作就好了。。

#41


关于定时触发任务,遇到难题了,求思路,200分送上~
女的,上照片就有一大波狼,过来帮你了

#42


关于定时触发任务,遇到难题了,求思路,200分送上~

参考Sql Server 2005 管理->维护计划

#43


引用 38 楼 laq616853363 的回复:
Quote: 引用 36 楼 laiyongxin 的回复:
1分钟,5分钟也太频繁了吧~
每天任务好说,每周和每月的,难点在于确定是否到达任务发布时间,并且计算下一次发布时间。

每1分钟 一次  不会很频繁的, 你可以自己做的测试
比如当天有1000个任务要发布,你每一分钟 执行一次 
for  int i=0;i<1000;i++
这个有什么压力呢

至于第二个问题 你不需要去确认 每周和每月这样任务类型的下一个执行时间,
因为你在定制任务的时候 肯定要有个字段 来存的 比如每周的 为  星期三  星期五 这样
每月的 就存 5号  10号 这样的

你在查询当天需要发布的任务的时候 是需要根据任务类型 分开执行sql的
你要对单次,  每周,  每月 三种类型 分别动态创建 当天的三个sql语句 ,这个语句 也不是很复杂,就是根据当天
计算出 是当月的第几天 ,本周的星期几 然后拼接一下sql就出来了

#44


关于定时触发任务,遇到难题了,求思路,200分送上~

#45


引用 38 楼 laq616853363 的回复:
Quote: 引用 36 楼 laiyongxin 的回复:
1分钟,5分钟也太频繁了吧~
每天任务好说,每周和每月的,难点在于确定是否到达任务发布时间,并且计算下一次发布时间。


还有一种 就是间隔天数是由客户自己定义的 比如 每3天执行一次
这种也很好处理. 我们将他看成是单次执行的,只是在发布任务时去修改一下下次发布的日期,我想这个很容易吧..

#46


Sql Server 2005 打个sp2补丁
关于定时触发任务,遇到难题了,求思路,200分送上~

#47


引用 46 楼 liuchaolin 的回复:
Sql Server 2005 打个sp2补丁
我们用的是2008~

客户不想在sqlserver里面或者WindowsTask里面去维护这个触发周期和具体时间,他想在页面上设置呢~

#48


引用 47 楼 laq616853363 的回复:
Quote: 引用 46 楼 liuchaolin 的回复:

Sql Server 2005 打个sp2补丁
我们用的是2008~

客户不想在sqlserver里面或者WindowsTask里面去维护这个触发周期和具体时间,他想在页面上设置呢~


那只能做服务了,只有服务组件才能实现离线自动触发

#49


引用 48 楼 liuchaolin 的回复:
那只能做服务了,只有服务组件才能实现离线自动触发
难点在于对于触发事件的计算和修改,我打算用sqlserver代理作业定每天去扫描数据,然后计算下一个触发时间,现在正在研究不同类型下下一个触发时间的计算,暂时用18楼那个思路~

多谢啦~

#50


你可以看看quartz的资料,或许能够帮到你;
quartz中的调度器、任务和触发器可以处理你提到的那些东西。