Mysql触发器监听A库中某一张表的动态变化,通过调用jar包的方式,调用另一个项目服务,使B库中的数据改变;或是直接将数据返回给前端。
注:(1)多数据源配置
(2)java在后台建立一个websocket,页面与此socket建立连接,
(3)写一个jar程序,当运行时与socket建立连接,并将参数发送到此socket
(4)数据库建立insert、update、delete触发器,当数据改变时调用外部jar程序
多数据源配置:https://blog.csdn.net/w57685321/article/details/106823660/
触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。
mysql触发器trigger 实例详解 :https://www.cnblogs.com/phpper/p/7587031.html
BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后
FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器
#创建有多个执行语句的触发器
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END
1.创建表demo表结构如下图
2.创建触发器
drop TRIGGER insertTrigger; -- 删除触发器
CREATE TRIGGER insertTrigger after insert -- insertTrigger 触发器的名称
ON demo FOR EACH row -- 该触发器是在demo表改变的时候发生
begin
DECLARE redata INT; -- 定义一个变量接收Select sys_exec...语句执行完成后的结果
Select sys_exec('java -jar D:\\logs\\sql-trigger-1.0.jar "http://localhost:8080/project/test" "demo" "insert"') INTO redata;
end
-- 要调用的外部服务打成jar:sql-trigger-1.0.jar
-- jar包存放的地址:D:\\logs\\jar包全名称
-- 需要调用另一个项目服务中的方法:http://localhost:8080/project/test
-- 传递的参数:demo、insert
jar包程序,创建maven项目,
package com.cctegitc;
import com.cctegitc.util.HttpUtil;
/**
* @Description:启动main方法
* @Author: yrc
* @Date: 2022/3/29 13:52
* @Param: [args]
* @Return: void
* @Throws:
*/
public class Main {
public static void main(String[] args) {
if (args != null && args.length >= 3) {
HttpUtil.request(args[0], args[1], args[2]);
}
}
}
//---------------------------------------------------------------------------------------------------
package com.cctegitc.util;
import java.io.IOException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
/**
* @Description:触发器调用后台请求
* @Author: yrc
* @Date: 2022/3/29 13:53
* @Param:
* @Return:
* @Throws:
*/
public class HttpUtil {
public static void request(String url, String table, String action) {
// httpclient客户端,类似于一个浏览器,可以由这个客户端执行http请求
CloseableHttpClient httpClient = HttpClients.createDefault();
// 请求
HttpGet httpGet = new HttpGet(url