Sqlserver数据库通知应用程序
现在有这么个需求,说是数据库的某些数据一旦有变化,立刻通知应用程序(Java Web项目) 应用程序即使调整信息以展示到大屏幕上. 解决办法大概有这么两个: 1. ??因为项目是用的java,可以弄个定时(java的定时或者spring的定时都可以),达到长时间轮训数据库,一旦数据变化就可以更新大屏幕信息. 检测数据是否变化可以在表上加触发器,一旦修改或删除 新增等,则记录一个最新的日志,java端来读这个日志就可以了. ? ? ? 但是这种的不足在于应用程序每一秒或两秒都要与数据库进行I/O,在大屏幕个数多的情况下(N多种不同的业务数据),性能确实不好. 2. ?反过来,当数据库表数据有变化时,让数据库通知应用程序 ? ? ? 实现: ?在表上加触发器,一旦数据变化,触发器调用存储,存储来通知应用程序. ? ? ? 因为我们用的是sqlserver, 这个就是sqlserver来发送一个http请求,同时应用程序,应用程序只要接到这个请求,随便你想干点什么! ---通过sql server 2008 调用应用程序 create PROCEDURE refreshAppEhcache(@input varchar(2000)) AS BEGIN declare @ServiceUrl as varchar(1000) --通过http协议调用的接口地址' set @ServiceUrl = 'http://localhost:8080/yi/jsp/todoTrigger.action?interfacetype=' + @input Declare @Object as Int Declare @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 OUTPUT Select @ResponseText Exec sp_OADestroy @Object END -----在接口日志表上新增触发器动态监控接口日志的同步情况 create TRIGGER log_trigger ON log AFTER INSERT AS 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暂时还没找到解决办法,我想肯定是有。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |