加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sqlserver数据库通知应用程序

发布时间:2020-12-12 13:24:58 所属栏目:MsSql教程 来源:网络整理
导读:现在有这么个需求,说是数据库的某些数据一旦有变化,立刻通知应用程序(Java Web项目) 应用程序即使调整信息以展示到大屏幕上. 解决办法大概有这么两个: 1. ??因为项目是用的java,可以弄个定时(java的定时或者spring的定时都可以),达到长时间轮训数据库,一旦数

现在有这么个需求,说是数据库的某些数据一旦有变化,立刻通知应用程序(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暂时还没找到解决办法,我想肯定是有。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读