现在有这么个需求,说是数据库的某些数据一旦有变化,立刻通知应用程序(Java Web项目) 应用程序即使调整信息以展示到大屏幕上.
解决办法大概有这么两个:
1. 因为项目是用的java,可以弄个定时(java的定时或者spring的定时都可以),达到长时间轮训数据库,一旦数据变化就可以更新大屏幕信息. 检测数据是否变化可以在表上加触发器,一旦修改或删除 新增等,则记录一个最新的日志,java端来读这个日志就可以了.
但是这种的不足在于应用程序每一秒或两秒都要与数据库进行I/O,在大屏幕个数多的情况下(N多种不同的业务数据),性能确实不好.
2. 反过来,当数据库表数据有变化时,让数据库通知应用程序
实现: 在表上加触发器,一旦数据变化,触发器调用存储,存储来通知应用程序.
因为我们用的是sqlserver, 这个就是sqlserver来发送一个http请求,同时应用程序,应用程序只要接到这个请求,随便你想干点什么!
---通过sql server 2008 调用应用程序create PROCEDURE refreshAppEhcache(@input varchar(2000)) ASBEGINdeclare @ServiceUrl as varchar(1000) --通过http协议调用的接口地址' set @ServiceUrl = 'http://localhost:8080/yi/Jsp/todoTrigger.action?interfacetype=' + @inputDeclare @Object as IntDeclare @ResponseText as Varchar(8000)Exec sp_OACreate 'MSXML2.XMLhttp',@Object OUT;Exec sp_OAMethod @Object,'open',NulL,'get',@ServiceUrl,'false'Exec sp_OAMethod @Object,'send'Exec sp_OAMethod @Object,'responseText',@ResponseText OUTPUTSelect @ResponseText Exec sp_OADestroy @ObjectEND-----在接口日志表上新增触发器动态监控接口日志的同步情况create TRIGGER log_trigger ON log AFTER INSERTAS BEGIN declare @ID Varchar(32) set @ID=(select ID from inserted) declare @content Varchar(64) set @content=(select content from inserted) insert into log_back (ID,code) values (@ID,@content); EXEC refreshAppEhcache @content;END
Oracle和MysqL怎么办呢?
oracle我查了查首先基本一样 , 不过oracle利用webservices来实现的,应用程序需要接受到一个soap请求.
MysqL用一个udf-http 的东东来发送http post请求,不过网上大多数都是在linux下实现的,windows暂时还没找到解决办法,我想肯定是有。
总结以上是内存溢出为你收集整理的Sqlserver数据库通知应用程序全部内容,希望文章能够帮你解决Sqlserver数据库通知应用程序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)