-
sql server 数据库向java接口推送数据
2019-09-26 15:04:50因为以前从未用数据库向java接口推送数据,所以为了实现这个demo我是一步一个脚印的踩坑啊!!! 此文章的作用以及应用场景:利用数据库主动推送数据,实现前端页面数据实时更新,替换ajax轮询机制。推送的依据是,...因为以前从未用数据库向java接口推送数据,所以为了实现这个demo我是一步一个脚印的踩坑啊!!!
此文章的作用以及应用场景:利用数据库主动推送数据,实现前端页面数据实时更新,替换ajax轮询机制。推送的依据是,只要数据库指定的表中数据增加有了变化,数据库会触发触发器然后通过存储过程调用消息推送接口
代码如下:....
----------------------------触发器--------------------------------------- USE [devRep] GO /****** Object: Trigger [dbo].[tr_sm_demo] Script Date: 2019/9/26 14:06:46 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Description: <Insert触发器> -- ============================================= create TRIGGER [dbo].[tr_sm_demo] ON [dbo].[demo] AFTER insert AS BEGIN declare @id int set @id = (select id from demo where id=@id) --如不指定条件查询 会出现 子查询返回的不是一个参数 !<> >>? 乱七八糟的一个错误 就是这里返回必须是一个数据 exec proc_useJPushAPI @id --调用存储过程并传参 如果传入的参数未变则不会触发 SET NOCOUNT ON; END
----------------------------存储过程-------------------------------- USE [devRep] GO /****** Object: StoredProcedure [dbo].[proc_useJPushAPI] Script Date: 2019/9/26 13:56:19 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Description: <调用消息推送接口> -- ============================================= CREATE procedure [dbo].[proc_useJPushAPI] @id varchar(20) --demo表的id字段 AS BEGIN --创建存储过程里的参数 declare @url varchar(4000) --接口路由 declare @object int --OLE对象实例 declare @responseText varchar(4000) --文本 declare @name varchar(20) select @name=name from demo; --查询demo表为接口传递参数 set @url = 'http://127.0.0.1:8080/site/recedata?name='+@name ; print @url exec sp_OACreate'MSXML2.XMLHTTP',@object out exec sp_OAMethod @object,'open',null,'get',@url,'false' exec sp_OAMethod @object,'send' exec sp_OAMethod @object,'responseText',@responseText output print @responseText exec sp_OADestroy @object SET NOCOUNT ON; END
//接收java接口代码 @RequestMapping(value = "/recedata") public String recedata( String name) { try { System.out.println("sql server 访问啦---"); return "HELLO"; } catch (Exception e) { logger.info(e.getMessage(),e); } return null; }
第二种写法
create table A(keyId int,info1 varchar(20)) go insert into A values(1,'a') insert into A values(2,'b') insert into A values(3,'C') insert into A values(4,'d') insert into A values(5,'e') insert into A values(6,'f') go create trigger tr_a_test on a after update as begin declare @keyId_old int ,@info1_old varchar(20) declare @keyId_new int ,@info1_new varchar(20) ---获取修改前的值 select @keyId_old=keyId,@info1_old =info1 from deleted ---获取修改后的值 select @keyId_new=keyId,@info1_new =info1 from inserted ----打印获取的相关值 print '-------修改前的值------' print @keyId_old print @info1_old print '-------修改后的值------' print @keyId_new print @info1_new end go update A set info1='testwwwtwt',keyId=108 where keyId =2 go drop trigger tr_a_test go truncate table A drop table A go
mybatis
create TRIGGER ${triggerName} ON ${tableName} AFTER INSERT ,UPDATE ,DELETE AS BEGIN declare @id varchar(11) declare @url varchar(255) declare @object int declare @responseText varchar(255) --删除 if(not exists(select 1 from inserted) and exists(select 1 from deleted)) select @id=${titleId} from deleted ELSE ---获取修改后的值 select @id=${titleId} from inserted print @id set @url = 'http://${urlApi}/${controUrl}?id='+@id; print @url Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT; exec sp_OAMethod @object,'open',null,'get',@url,'false' exec sp_OAMethod @object,'send' exec sp_OAMethod @object,'responseText',@responseText output Exec sp_OADestroy @Object EXEC sp_OAGetErrorInfo @Object --异常输出 END;
现在只要在数据库执行这个sql into demo (name) values ('你真的很棒啊'); 就可以访问接口
这里有个坑啊 如果你的表名是demo,接收java接口的@RequestMapping 里也是叫demo, 那么无论你在怎么增加 它都不会跑到这个方法
嗨!出错了嘛? 看这
SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
借鉴博客:
http://www.manongjc.com/article/44753.html
https://www.jianshu.com/p/244c3cc30123
https://www.cnblogs.com/tohen/p/4265263.html
https://www.cnblogs.com/lflyq/archive/2016/11/15/6065160.html
做个记录...
用数据库推送 websocket接收渲染前端页面应该是 万瑞古德!
-----------------补存-------2020年12月9日11:20:40
之前写的触发器向指定接口传数据,只是写了一个demo,并没有真正使用,后续使用遇到一些问题,做一些记录
问题:
使用mybatis创建触发器和存储过程后,在数据库里添加demo表中的数据,由于传的参数是id,在接口里查询当前参数id的值,结果mybatis查询走到mapper层就卡死了,当前百思不得其解,以为是程序写的有问题。经过不断的摸索和实验最后发现当在数据库中添加
一条数据时触发器立马请求存储过程中的http接口,然后接口根据id查询最新的数据,为啥会卡死呢?原因就是触发器之前,这个事务并未结束,insert并没有真正的添加到数据库中,所以导致一系列问题.
解决:
我的解决思路很简单,上代码
new Thread(() -> { try { //放到多线程中等待1-2秒,等他的事务完事后在查询 Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } }).start();
如有问题,请指出
-
ETL: 如何使用kettle向API接口推送Json数据
2019-04-28 08:05:31Kettle作为开源ETL工具,使用较多(因为不花钱)。 最近我个人在使用的时候遇到了需要将hive的数据... 因为向下游推送数据时候,需要先获取 Token密码,再拼接为API的URL 。所以,第一步需要先获取Token密码: ...Kettle作为开源ETL工具,使用较多(因为不花钱)。
最近我个人在使用的时候遇到了需要将hive的数据以Json的格式推动到API 接口。调用API使用的是Kettle的组件“rest client”。具体的流程如下:
因为向下游推送数据时候,需要先获取 Token密码,再拼接为API 的URL 。所以,第一步需要先获取Token密码:
1.Token_url:主要是放入获取Token密码的URL,方便第2步骤使用:
如何不限制记录为1设置为n,则访问n次url并且生产n个token密码
2.获取Token: 访问URL,并得到包含Token密码的结果
从上一步获取URL,设置为GET方式。因为上游返回的是Json文档,所以这里数据类型设置为Json,返回结果集为“result”。返回的结果集如下:
3.解析接收到的结果,得到Token密码:
因为返回结果集是Json格式,所以使用Json input组件进行解释。源设置需要按图中设置,需要输出什么字段需要向图二那样设置源字段再Json的路径和输出字段名。否则需要制定本地Json文件路径
4.设置变量:
将token密码放到变量中。因为变量只能由一个值,所以前面1那里需要“”限制“”设定为1,否则报错。关于为何需要添加“变量设置”,再稍后会讲解。
第二步,向API推送数据,大致流程是:输入数据,转化为Json格式,调用API推送
1.表输入:
自定义查询语句,句末不要添加“;”,否则或报错,AS 后面使用目标字段名称(也就是下游对应的名字)
2.JSON Output: 将结果集转化为JSON格式
设置转化模式,因为不需要输出到文件,所以选择了“output value”,条目名称和输出值的名字可以自定义,每个条目的的数行数请根据API的处理能力设置。
这里主要是建立源字段和目标字段的对应关系,如果下游字段名称是英文,可以把它们放入表输入的AS 后面,然后再JSON Output的图二那里点击“获取字段”,就能看到字段名(SELECT结果集中的字段名)和元素名称(下游的字段名)对应关系了,最后针对顺序或者元素名称的大小写调整下就好了,注意JSON的字段名是区分大小的。
3.JSON Input: 调整Json数据的格式
指定输入源,因为是从之前的步骤获取,所以选择“源定义在一个字段中”,为何这样可看下图:
在“字段”选项中选择数据路径,自定义“名称“,因为的需要Jsonbody 中的{..}部分,所以路径为$.JsonBody[*]。
路径的设置请按需要设置。
3. REST Client : 调用API 推送数据
URL和推送方式根据API的接口配置
第3步,将上面两个步骤的转化放入作业中:
统计满足条件的记录数:因为结果集为空,在2步那里会报空指针错误,所以先判断按条件是否由结果集。如果没有则走上图红色线,否则继续绿色线。这里就相当于IF ...ELSE判断。可以自定义SQL语句
注意:有人会说在这里为什么不用count,我之前试过,这样会报错的。这个组件是对query的输出结果行数进行判断。无论有没数据,使用count 都会由统计结果输出的,且组件会判断有满足条件的数据。
“getToken”和“postData”是引用第1步和第2步,因为获取token的URL是公用的,所以获取Token转化是公用的,Token也放到参数中,方便后面的转化引用。
-
java接口推送_API对接实战:外呼接口及通话记录推送
2021-03-06 22:33:02外呼接口实现官方接口文档:http://developer.7moor.com/v2docs/dialout/1、对接数据查询向七陌商务索取到七陌用户中心账号密码,在查询页面查询到三个参数letaccountId="T0********";//账户idletapiSecret="495b60*...在白码低代码开发平台上对接七陌外呼接口,实现选择客户进行外呼,并保存通话记录的功能。
外呼接口实现
官方接口文档:http://developer.7moor.com/v2docs/dialout/
1、对接数据查询
向七陌商务索取到七陌用户中心账号密码,在查询页面查询到三个参数
let accountId = "T0********";//账户id
let apiSecret = "495b60****************5f0555af";//账户secret
let host = "https://openapis.7moor.com";//请求域名
查询页面:http://developer.7moor.com/data-query/
2、接口鉴权信息
时间戳
//时间
let date = new Date();
let YY = date.getFullYear();
let MM = (date.getMonth() + 1
let DD = (date.getDate() + 1 <= 10 ? '0' + date.getDate() : date.getDate());
let hh = (date.getHours() + 1 <= 10 ? '0' + date.getHours() : date.getHours());
let mm = date.getMinutes() + 1 <= 10 ? '0' + date.getMinutes() : date.getMinutes();
let ss = date.getSeconds() + 1 <= 10 ? '0' + date.getSeconds() : date.getSeconds();
let time = YY + MM + DD + hh + mm + ss;
包头验证信息Authorization
//包头验证信息 Authorization的值为 Base64编码(账户Id +冒号+时间戳)
let buffer = $modules.lib.Buffer.from(accountId + ":" + time);
let authorization = buffer.toString("base64");
请求参数sig
//sig, 32位大写MD5加密 (帐号Id + 帐号APISecret +时间戳)
const crypto = $modules.crypto;
const hash = crypto.createHash('md5');
let sig = hash.update(accountId + apiSecret + time).digest('hex').toLocaleUpperCase();
3、外呼接口请求地址
//请求地址
let url = host + "/v20180426/call/dialout/" + accountId + "?sig=" + sig;
4、请求头部
//请求头部
let headers = {
"Content-Type": "application/json;charset=utf-8",
"Authorization": authorization,
}
5、请求体
相关参数参考官方文档:http://developer.7moor.com/v2docs/dialout/
//请求体
let data = {
"FromExten": $input.FromExten,
"Exten": $input.Exten,
"ExtenType": typeMap[$input.ExtenType],
"ActionID": $input.ActionID,
"DialoutStrVar": $input.DialoutStrVar,
};
为了方便用户端理解,extenType参数输入增加map
//ExtenType map
let typeMap = {
"手机": "Local",
"软电话": "sip",
"IP话机": "gateway",
}
6、发起外呼请求
//外呼
let call = await $modules.curl(url, {
method: "post",
dataType: "json",
headers,
data,
});
7、输出请求结果
//输出
//$output.sig = sig;
//$output.authorization = authorization;
$output.request = data;
$output.result = call.data;
$output.success = call.data.Succeed.toString();
$output.msg = call.data.Message;
坐席接听方式说明:外呼时强制坐席使用该接听方式进行外呼。Local为“手机”,”sip为“软电话”需登录企话宝,gateway为“语音网关”,需注册绑定IP话机。
Sip方式外呼效果:
通话记录事件推送实现
官方接口文档:http://developer.7moor.com/event/
1、设置推送地址
添加一个webhook,设置路径。
将完整路径复制,与用户中心账户名一并发给七陌业务员,让对方配置该路径。
2、处理接收的信息
async function hook($req = request, $resp = response, $modules = modules) {
//返回字符串 200,告知七陌已成功接收
$resp.body = "200";
let json = {
query: $req.query,//接收的数据,get方式
body: $req.body,//接收的数据,post方式
timestamp: new Date().toString()
}
//保存接收的数据
$modules.data.saveData("60177fad283f87288d276269", {
"60177fc32f8b27288c6023dd": JSON.stringify(json)
})
}
接收到的数据:
-
服务端主动推送数据、长连接
2020-06-07 00:27:21EventSource 是服务器主动向客户端推送数据的一个网络事件接口。一个 EventSource 实例会对 HTTP 服务开启一个持久化的连接,以 text/event-stream 格式发送事件, 会一直保持开启直到被要求关闭。 服务端 // node ...EventSource
- 服务端主动推动数据
EventSource 是服务器主动向客户端推送数据的一个网络事件接口。一个 EventSource 实例会对 HTTP 服务开启一个持久化的连接,以 text/event-stream 格式发送事件, 会一直保持开启直到被要求关闭。
服务端
// node 的实现 // 单边通讯,服务器主动推送客户端 const fs = require("fs"); const http = require("http"); let server = http.createServer((req, res) => { let url = req.url; if (url === "/") { // 这个路由主要是显示界面(当然如果不需要 node 加载 html 文件,也可以不用这个路由) res.setHeader("Content-Type", "text/html;charset=utf-8"); let rStream = fs.createReadStream("./index.html"); rStream.pipe(res); } else if (url === "/sse") { // SSE 接口 // 如果页面的打开形式不是 通过当前node 环境(非同源),那么设置允许跨域 res.setHeader("Access-Control-Allow-Origin", "*"); // 设置成为 text/event-stream 是关键 res.setHeader("Content-Type", "text/event-stream;charset=utf-8"); setInterval(() => { // 不能使用 end ,因为 end 直接就断开连接了。而我们的需求是长连接 // data: 数据开始标志 // \r\n\r\n 数据结束标志 res.write("data:" + new Date() + "\r\n\r\n"); }, 1000); } }); server.listen(3001); console.log("this server is listening on port 3001");
客户端
<html> <body> <h1> SSE 案例 </h1> <p id="info"></p> <button onclick="cls()">关闭连接</button> <script> let source = new EventSource("http://127.0.0.1:3001/sse"); // 如果 当前页面是通过 node 环境呈现,不需要跨域的话,也可以这样写 // let source = new EventSource("/sse"); source.onopen = function () { console.log("连接成功"); // 0 connecting 正在连接 // 1 open 已打开 // 2 closed 已关闭 // console.log(source.readyState); 查看状态 }; // 如果有数据发送过来会触发 message 事件 source.onmessage = function (e) { console.log(e.data); document.getElementById("info").innerHTML = e.data; }; // 如果出现错误 source.onerror = function (err) { console.log(err); return; }; function cls() { // 关闭连接 source.close(); } </script> </body> </html>
-
使用极光推送向apicloud应用推送消息
2018-07-16 20:45:18在app开发过程中,client和server的信息交互分两种方式-pull(拉)或者push(推)。...所以出现了push的方式,当服务器产生新的消息时,主动向客户端程序推送,这种推送的方式更及时,消耗资源更少。 -
【工作问题】Java如何主动推送数据到浏览器?
2020-04-18 16:51:07写惯了接口都不知道该怎么主动推送数据了。。 Websocket,一种在单个 TCP 连接上进行全双工通讯的协议。也就是说,它允许服务端主动向客户端推送数据。并且只需要一次握手,两者之间就可以创建持久性的连接,并进行... -
bcb6通过https接口post数据_python提取数据库数据并实现企业微信机器人定时消息推送...
2020-11-21 23:08:21其实企业微信机器人就是一个webhook接口,用户以post data向这个Webhook地址发起HTTP POST 请求,即可实现给该群组发送消息了。最近在使用python这个万能的胶水语言实现一些办公自动化的操作,顺便用python简单实现... -
【上海导购网】向上海导购网推送订单数据的代码
2013-01-25 18:22:34一、上海导购网CPS接口:从上海导购网引导过来的用户在本商城下订单后,本商家应该按协议好的分成规则支付给上海导购网一定的佣金//首次将本商城订单数据推送给第三方合作商家(上海导购网) //要求:从上海导购网过来... -
python接口服务两种方式(被调用、主动推送)
2020-11-25 15:57:57接口主动向外部推送数据 1外部调用python接口,返回数据 这种方式一般可以通过http接口,定义接口的ip和端口,外部通过ip和端口调用,调用的程序再返回结果。 接口服务代码如下: import flask import json from ... -
将数据推送到其他系统
2016-09-30 02:52:50通过接口向其他系统推送部门,那么部门的增删改由谁完成??我只管查询数据将查询结果推过去,还是我这边每次修改,删除的结果也要过去 -
java外呼接口案例_API对接实战:外呼接口及通话记录推送
2021-03-22 17:38:56外呼接口实现1、对接数据查询向七陌商务索取到七陌用户中心账号密码,在查询页面查询到三个参数letaccountId="T0********";//账户idletapiSecret="495b60****************5f0555af";//账户secretlethost="https:/... -
通过百度API接口主动推送文章实现语言python|go|php|ruby
2020-09-20 14:52:001、普通收录工具可以向百度搜索主动推送资源,缩短爬虫发现网站链接的时间,不保证收录效果。 2、API提交和手动提交共享配额,每日至多提交10万条有价值的内容,sitemap提交配额不与其他方式共享,具体配额以站点... -
API对接实战:外呼接口及通话记录推送
2021-02-05 16:51:441、对接数据查询 向七陌商务索取到七陌用户中心账号密码,在查询页面查询到三个参数 letaccountId="T0********";//账户id letapiSecret="495b60****************5f0555af";//账户secret l... -
企业微信推送消息延迟_python提取数据库数据并实现企业微信机器人定时消息推送...
2020-12-29 13:50:55其实企业微信机器人就是一个webhook接口,用户以post data向这个Webhook地址发起HTTP POST 请求,即可实现给该群组发送消息了。最近在使用python这个万能的胶水语言实现一些办公自动化的操作,顺便用python简单实现... -
websocket 步骤 消息推送_GO实现千万级WebSocket消息推送服务技术分析
2020-12-31 20:15:53拉模式和推模式区别拉模式(定时轮询访问接口获取数据)数据更新频率低,则大多数的数据请求时无效的在线用户数量多,则服务端的查询负载很高定时轮询拉取,无法满足时效性要求推模式(向客户端进行数据的推送)仅在... -
证书推送到云产品_【IoT平台技术对接分享】如何上传正确的消息推送证书
2021-01-17 14:16:23推送:平台调用应用服务器的restful接口将数据主动发给北向应用(这些restful接口是平台在北向接口文档的消息推送章节提前定好,由应用服务器实现的。)回调地址:应用实现消息推送的restful接口时,可以自定义接口的... -
springboot SseEmitter 消息推送
2020-03-31 19:15:25这是SpringMVC提供的一种技术,可以实现服务端向客户端实时推送数据.用法非常简单,只需要在Controller提供一个接口,创建并返回SseEmitter对象,发送数据可以在另一个接口调用其send方法发送数据. SpringBoot已经集成了... -
WebSocket系列10---千万级WebSocket消息推送服务技术分析
2020-06-27 00:45:27推模式(向客户端进行数据的推送) 仅在数据更新时,才有推送 需要维护大量的在线长连接 数据更新后,可以立即推送 基于WebSocket协议做推送 浏览器支持的socket编程,轻松维持服务端的长连接 基于TCP协议之上... -
千万级WebSocket消息推送服务技术分析
2018-08-11 16:20:36推模式(向客户端进行数据的推送) 仅在数据更新时,才有推送 需要维护大量的在线长连接 数据更新后,可以立即推送 基于WebSocket协议做推送 浏览器支持的socket编程,轻松维持服务端的长连接 基于TC... -
SEO利器 - 网页内容监控之百度自动推送
2019-09-20 10:16:43百度主动推送即将网站内容主动推送到百度站长平台数据推送接口,百度主动推送可缩短爬虫发现网站链接时间,网站时效性内容建议使用链接提交工具,实时向搜索推送数据。 百度站长平台页提供了百度自动推送API实例... -
微信推送模板消息
2019-03-28 15:44:28微信公众号向用户推送模板消息 首先需要在微信公众号平台添加自己要推送的模板(这边就以测试公众号为例) 根据添加的模板内容与格式数据 接下来就是根据api的接口去调用 官方文档:... -
python定时取数据库数据类型_python提取数据库数据并实现企业微信机器人定时消息推送...
2020-12-22 21:11:10其实企业微信机器人就是一个webhook接口,用户以post data向这个Webhook地址发起HTTP POST 请求,即可实现给该群组发送消息了。最近在使用python这个万能的胶水语言实现一些办公自动化的操作,顺便用python简单实现... -
消息推送与拉取
2016-06-21 06:42:27“推送”一般是指因特网内容提供者定期向预订用户“推送”数据,来减少用于网络上搜索的时间。它根据用户的兴趣来搜索、过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息,譬如通过电子邮件 -
网页调用api接口_你知道吗通过公众号api数据接口可以调用哪些数据?
2020-12-04 12:56:36公众号api接口具体是做什么用的呢,微信公众平台目前分成消息接口...通用接口的作用是实现诸如获取粉丝资料,上传媒体文件以便消息接口回复图片、语音和视频等多媒体消息等功能,丰富消息接口的同时支持主动推送消息... -
【IoT平台技术对接分享】如何上传正确的消息推送证书
2019-09-26 10:08:13推送:平台调用应用服务器的restful接口将数据主动发给北向应用(这些restful接口是平台在北向接口文档的消息推送章节提前定好,由应用服务器实现的。) 回调地址:应用实现消息推送的restful接口时,可以自定义接口... -
web-msg-sender:基于workerman用PHP编写的Web消息推送器-源码
2021-02-24 19:29:41基于开发,使用websocket推送数据,当浏览器不支持websocket时自动切换彗星推送数据。 效果截图 在线演示 接收消息页面: ://www.workerman.net:2123 初步推送接口网址: ://... -
百度SEO主动推送工具-小超越工作室
2021-04-01 21:23:14链接提交工具是网站主动向百度搜索推送数据的工具,本工具可缩短爬虫发现网站链接时间,网站时效性内容建议使用链接提交工具,实时向搜索推送数据。 本工具可加快爬虫抓取速度,无法解决网站内容是否收录问题 百度...