关于定时器扫描数据库,根据数据库的值去想webservice定时发送,求高手给个思路

问题描述

[b][/b]现在有这样一个需求,有表A 字段col_a;现在我需要用定时器去定期扫描表A中的数据,根据字段col_a的值来做些逻辑操作!:col_a的值有0,1,2,3,4,5如果为0:则等待15分钟把这条数据向一个webservice发送数据如果为1:则等待一个小时把这条数据向一个webservice发送数据如果为2:则等待4个小时钟把这条数据向一个webservice发送数据如果为3:则等待8个小时把这条数据向一个webservice发送数据如果为4:则等待12个小时把这条数据向一个webservice发送数据(上面逻辑如果15分钟发送的失败col_a更新为1,一个小时发送失败col_a更新为2 以此类推,发送五次。如果一次成功则后面操作不需要做!如果五次都不成功则视为失败)现在我想要些思路!我想等待用object.wait();但是这样会不会出现一个问题,当我一个还在wait的时候,定时器又扫描表又要发送数据,有什么好的办法!或者有什么能锁定数据呢!求给些思路

解决方案

我觉得还是用伪代码表示比较方便:1. scan thread: List<String> col_a_list = get col_a record from dbscan thread: stop;for (String col_a: col_a_list) { int time = getTime(col_a);//get time based on col_a startTimer(time, new WebServiceThread()); update db record of col_a to tell make it not eligible for the scan thread.}2. WebServiceThread:If success { update db record of col_a to tell make it not eligible for the scan thread.} else if (col_a == 4) { update db record of col_a to tell make it not eligible for the scan thread.} else { update col_a = col_a + 1;}
解决方案二:
根据你定时发送的特点,可以把定时发送时间定为15分钟一次。每次扫描出来的值,都放进一个数据库表或者队列,15分钟去检查一次决定是否发送就可以了。
解决方案三:
您上面的算法应该在线程中调用sleep进行休眠而不是去等待。因为,等待如果不唤醒是不会重新运行的。
解决方案四:
典型TOP-K算法

时间: 2024-08-30 03:18:52

关于定时器扫描数据库,根据数据库的值去想webservice定时发送,求高手给个思路的相关文章

C#查询SqlServer数据库并返回单个值的方法

  本文实例讲述了C#查询SqlServer数据库并返回单个值的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 static public string GetSqlAsString(string sqlText, SqlParameter[] sqlParameters, string databaseConnectionString) { string result = ""; Sq

javascript-extjs 下拉框只能显示从数据库返回的value值而无法显示文本值

问题描述 extjs 下拉框只能显示从数据库返回的value值而无法显示文本值 xtype : 'combobox', fieldLabel : '类型', afterLabelTextTpl : '*', name : 'type', store : new Ext.data.SimpleStore({ fields : ['ItemValue', 'ItemText'], data : [ [ 1, '推荐医院' ],[ 2, '合作药店' ],[ 3, '合作药企' ],[ 4, '首页分

jsp-后台到数据库可以查到值,但是,前台却不显示值,但是又一行记录,这是为什么?

问题描述 后台到数据库可以查到值,但是,前台却不显示值,但是又一行记录,这是为什么? --------------------------------listProducts.jsp------------------------------------ <table class=""table table-striped"" width=""1024""> <thead> <tr> <

c#连接mysql数据库字符串database属性值含有特殊符号 “.”怎么转义

问题描述 c#连接mysql数据库字符串database属性值含有特殊符号 "."怎么转义 解决方案 直接改名字吧,换成 _ 解决方案二: 用修饰试试呢或者修改一下密码 解决方案三: 不需要转义的,你直接用就可以的

如何设置数据库id的初始值,mysql

问题描述 如何设置数据库id的初始值,mysql 我想要实现ID的自增长,这个id要是一个指定的序列比如年月日+00001,之后依次是00002,这样要如何实现? 解决方案 http://blog.csdn.net/likika2012/article/details/9901591这个写得很好,你可以看看 解决方案二: 年月日应该是有函数可以生成,然后在自己后面加上00001,,,00002..等 解决方案三: 一般自动增长都是直接1,234,这样的,或者类似UUID之类的,你的要求,可能要在

list-使用javamail从数据库中循环获值,发送到邮箱中的问题。

问题描述 使用javamail从数据库中循环获值,发送到邮箱中的问题. 将数据库中获得的值存放在list中,通过String将值发送到邮箱中. String body="内容" message.setContent(body,"text/html;charset=GBK"); 怎么才能够将List的值以循环的格式传到String中?或者有没有其他的方法能够将数据库List的值发送? 解决方案 list是什么,是收件人地址么? for (String s : list

java-SQlite 数据库不能存储double 值为字符串

问题描述 SQlite 数据库不能存储double 值为字符串 我使用下面的代码 public boolean addArea(AreaClass area , ArrayList<AreaMarkClass> areaArray) { area.id = getNextAreaId(); Log.d("longitude", area.longitude); Log.d("latitude", area.latitude); ContentValues

PHP获取input输入框中的值去数据库比较显示出来_php实例

前端: <!--商品查询--> <input type="text" name="bianhao" value="" maxlength="10" size="10" style="width:100px; margin:0px 0px 0px 25px;height:20px;"/> <input type="submit" value

CheckedlistBox如何将数据库设置好的值绑定到该控件并置为checked

问题描述 CheckedlistBox如何将数据库设置好的值绑定到该控件并置为checked?我的思路是:1.先将数据库所有数据绑定起来,2.再读取数据库中设置好的值,放入DataTable.3.根据2.中的DataTable的值遍历并与1.中的值对比,如果相等就置为checked.现在的问题是第三步如何写?我没有找到控件方法,向大家请教了. 解决方案 解决方案二:把数据库中需要绑定的数据和设置好的值一次性读出来,然后在绑定checkedListBox的时候判断,处理解决方案三:第三部,两个遍历