日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql实体监听器_GitHub - langjiangit/spring-boot-starter-mysql-binlog: mysql的binlog监听器

發(fā)布時(shí)間:2025/3/8 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql实体监听器_GitHub - langjiangit/spring-boot-starter-mysql-binlog: mysql的binlog监听器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mysql binlog監(jiān)聽器

前置操作

1.查看mysql是否開啟binlog

show variables like 'log_bin';

2.查看是否使用row格式的binlog

show variables like 'binlog_format';

3.如果以上都不是請(qǐng)修改mysql的配置文件添加或者修改如下內(nèi)容

#配置binlog存放路徑

log-bin=E://mysql//binlog//mysql-bin

#bin日志的格式 Mixed/row

binlog-format=row

4.重啟mysql再次執(zhí)行1.2步查看是否生效

使用

1.執(zhí)行 mvn install

2.引入下面包

cn.bucheng

binlog-core

0.0.1-SNAPSHOT

3.添加下面配置

mysql.binlog.host=127.0.0.1

mysql.binlog.port=3306

mysql.binlog.username=root

mysql.binlog.password=123456

4.創(chuàng)建需要監(jiān)聽的實(shí)體對(duì)象

(目前默認(rèn)將java字段轉(zhuǎn)數(shù)庫(kù)字段規(guī)則:將大寫字母小寫并在前面添加_ 比如 userName -轉(zhuǎn)變?yōu)?> user_name)

@Data

@NoArgsConstructor

@AllArgsConstructor

@ToString

@TableName(schema = "ad_test", table = "ad_book")

public class BookEntity implements Serializable {

//如果數(shù)據(jù)庫(kù)中列表和表名相同可以不用添加Column注解

private Long id;

private String name;

private String title;

private String writer;

@ColumnName(sqlColumn = "create_time")

private Date createTime;

@ColumnName(sqlColumn = "update_time")

private Date updateTime;

private String content;

}

5.創(chuàng)建監(jiān)聽并添加到springboot容器中

@Component

@Slf4j

public class BookListener implements IListener {

@Override

public Class getClassType() {

return BookEntity.class;

}

@Override

public void saveEvent(BookEntity data) {

log.info("save event, " + data);

}

@Override

public void updateEvent(BookEntity data) {

log.info("update event," + data);

}

@Override

public void deleteEvent(Serializable id) {

log.info("delete event," + id);

}

}

6.默認(rèn)會(huì)將數(shù)據(jù)回設(shè)到對(duì)象上面當(dāng)時(shí)存在有些字段回設(shè)不成功此時(shí)可以利用下面來(lái)實(shí)現(xiàn)高級(jí)用法

@Component

@Slf4j

public class BookHandle implements FieldValueHandle {

@Override

public Class getClassType() {

return BookEntity.class;

}

@Override

public BookEntity handle(Map values) {

log.info("decode column value to object");

BookEntity entity = BinLogUtils.decode(BookEntity.class, values);

Serializable content = values.get("content");

if(content!=null){

byte[] datas = (byte[])content;

entity.setContent(new String(datas));

}

return entity;

}

}

高級(jí)用法

1.記錄binlog加載文件并初始化偏移量為0

@Component

@Slf4j

public class GlobalBinLogFileHandle implements IBinLogFileListener {

@Autowired

private RedisTemplate redisTemplate;

@Override

public void handleBinLogFile(String fileName, long position) {

redisTemplate.opsForHash().put("es-boot-binLog", "filename", fileName);

redisTemplate.opsForHash().put("es-boot-binLog", "position", position + "");

log.info("save binLogFile:{} position:{}",fileName,position);

}

}

2.記錄binlog加載的偏移量

@Component

@Slf4j

public class GlobalCommitPositionHandle implements BinLogCommitPosition {

@Autowired

private RedisTemplate redisTemplate;

@Override

public void commitBinLogPosition(long position) {

log.info("update position to redis position:{}", position);

redisTemplate.opsForHash().put("es-boot-binLog", "position", position + "");

}

}

3.服務(wù)異常重啟時(shí)恢復(fù)上次加載位置

@Slf4j

@Component

public class GlobalConfigHandle implements BinLogConfigHook {

@Autowired

private RedisTemplate redisTemplate;

@Override

public void config(BinLogConfig config) {

Object filename = redisTemplate.opsForHash().get("es-boot-binLog", "filename");

Object position = redisTemplate.opsForHash().get("es-boot-binLog", "position");

if (filename != null && !filename.equals("") && position != null && !"".equals(position + "")) {

log.info("begin load filename:{}, position:{}", filename, position);

config.setFile(filename + "");

config.setPosition(Long.parseLong(position + ""));

}

}

}

4.注意點(diǎn),

>>1:不要使用監(jiān)聽的庫(kù)存放上面記錄,不然會(huì)出現(xiàn)死循環(huán),也就binlog不斷在變化

>>2:不要在監(jiān)聽器中進(jìn)行耗時(shí)操作,這樣會(huì)阻塞其他監(jiān)聽器及時(shí)接收消息能力。如果需要耗時(shí)的操作請(qǐng)采用開啟線程進(jìn)行操作

示例代碼

請(qǐng)查看example模塊中的readme

總結(jié)

以上是生活随笔為你收集整理的mysql实体监听器_GitHub - langjiangit/spring-boot-starter-mysql-binlog: mysql的binlog监听器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。