由于我们公司的需要,需要对我们公司的产品数字法庭上报数据到资源管理中心,由于数字法庭产品经历了多个小版本和大版本,因此对于统一的上报数据插件代码编写起来没办法很好的兼容。因此我们采取了通过触发器的方式来监控需要上报的数据。
目前我们公司在数字法庭上主要有两个大版本:4.0以及6.0
现在以用户为例:
1、新建表,用来存储监控到的信息。
zjid | int |
mk | varchar |
mkid | char |
cz | varchar |
sjc | char |
zjid:该条监控的id(唯一)
mk:记录监控的模块
mkid:对应表的id(用户对应的是用户表中自己的id)
cz:insert、update、delete操作
sjc:操作数据的时间戳,用于数据优化及判断优先级
2、添加触发器:添加存储过程
DELIMITER $$
USE `huanghpa`$$
DROP PROCEDURE IF EXISTS `syn_fy_cjzjb_proce`$$
CREATE DEFINER=`root`@`%` PROCEDURE `syn_fy_cjzjb_proce`(IN module VARCHAR(15),IN moduleId CHAR(36),IN methodType VARCHAR(6))
BEGIN
INSERT INTO `fy_cjzjb`(`mk`,`mkid`,`cz`,`sjc`) VALUES (module,moduleId,methodType,NOW());
END$$
DELIMITER ;
a、addUser
b、updateUser
DELIMITER $$
USE `huanghp`$$
DROP TRIGGER /*!50032 IF EXISTS */ `addUser_trigger`$$
CREATE
/*!50017 DEFINER = 'root'@'%' */
TRIGGER `addUser_trigger` AFTER INSERT ON `pt_yh`
FOR EACH ROW BEGIN
CALL `syn_fy_cjzjb_proce`("user",new.yhid,"INSERT");
END;
$$
DELIMITER ;
DELIMITER $$
USE `huanghp`$$
DROP TRIGGER /*!50032 IF EXISTS */ `updateUser_trigger`$$
CREATE
/*!50017 DEFINER = 'root'@'%' */
TRIGGER `updateUser_trigger` AFTER UPDATE ON `pt_yh`
FOR EACH ROW BEGIN
CALL `syn_fy_cjzjb_proce`("user",new.yhid,"UPDATE");
END;
$$
DELIMITER ;
不举例说明
4、在java中通过一个线程每隔10S去获取一次监控表,并通过SJC对同一数据(一个用户其实可以认为是一个对象,每次发送只发送最后操作,避免接收端因为接受处理导致同步出现问题)。
5、将获取的表数据通过调度类分发到各自的处理类进行处理
调度对象获取的模块名及对应的操作进行相应的处理,并发送给上级!
<bean id="reportHandlerManager" class="cn.chnsys.cmsReport.ReportHandlerManager">
<!-- 协议映射对象 -->
<property name="protocolHandlerMap">
<map>
<entry key="courtRoom" value-ref="courtRoomProtocolHandler" />
<entry key="trialPublish" value-ref="trialPublishHandler" />
<entry key="trialLive" value-ref="trialLiveHandler" />
<entry key="trialVod" value-ref="trialVodHandler" />
<entry key="trialModify" value-ref="trialModifyHandler" />
<entry key="alarmInfo" value-ref="alarmHandler" />
<entry key="caseInfo" value-ref="caseInfoProtocolHandler" />
<entry key="encode" value-ref="encodeProtocolHandler" />
<entry key="decode" value-ref="decodeProtocolHandler" />
<entry key="encodeChannel" value-ref="encodeChannelProtocolHandler" />
<entry key="decodeChannel" value-ref="decodeChannelProtocolHandler" />
<entry key="server" value-ref="streamServerProtocolHandler" />
<entry key="user" value-ref="userProtocolHandler" />
<entry key="job" value-ref="jobProtocolHandler" />
<entry key="department" value-ref="departmentProtocolHandler" />
</map>
</property>
</bean>
调度对象获取的模块名及对应的操作进行相应的处理,并发送给上级!