Kaynağa Gözat

1、增加查询binlog日志文件的查询
2、增加binlog日志记录的创建和更新时间,一遍后续好排查问题

weiyizhong 3 yıl önce
ebeveyn
işleme
06baf1c7ef

+ 6 - 10
src/main/java/com/persagy/binlog/BinlogClientRunner.java

@@ -13,6 +13,7 @@ import com.persagy.configuration.MyBatisPlusConfig;
 import com.persagy.entity.RwdObjectWd;
 import com.persagy.mapper.RwdObjectWdMapper;
 import com.persagy.utils.CacheUtil;
+import com.persagy.utils.DBUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -42,6 +43,8 @@ public class BinlogClientRunner implements CommandLineRunner {
     @Autowired
     private RwdObjectWdMapper rwdObjectWdMapper;
 
+    @Autowired
+    private DBUtil dbUtil;
 
     @Value("${binlog.host}")
     private String host;
@@ -117,6 +120,9 @@ public class BinlogClientRunner implements CommandLineRunner {
                 binlogPosition = new BinlogPosition();
             }
             binlogPosition.setServerId(serverId);
+            //查询binlogName
+            String binlogName = dbUtil.queryBinlogName("show binary logs");
+            binlogPosition.setBinlogName(binlogName);
             binlogPositionService.saveOrUpdate(binlogPosition);
         }
 
@@ -211,7 +217,6 @@ public class BinlogClientRunner implements CommandLineRunner {
             }
             EventHeaderV4 eventHeaderV4 = (EventHeaderV4) event.getHeader();
             binlogPositionSave.setPosition(eventHeaderV4.getPosition());
-//            binlogPositionSave.setBinlogName(event)
             binlogPositionSave.setServerId(event.getHeader().getServerId());
         }
         //将最新的配置保存到Redis中
@@ -219,13 +224,4 @@ public class BinlogClientRunner implements CommandLineRunner {
         binlogPositionService.saveOrUpdate(binlogPositionSave);
     }
 
-    private static long getRandomServerId() {
-        try {
-            return SecureRandom.getInstanceStrong().nextLong();
-        } catch (NoSuchAlgorithmException e) {
-//            return RandomUtils.nextLong();
-        }
-        return 0L;
-    }
-
 }

+ 28 - 0
src/main/java/com/persagy/ccontinue/MyMetaObjectHandler.java

@@ -0,0 +1,28 @@
+package com.persagy.ccontinue;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Component
+@Slf4j
+public class MyMetaObjectHandler implements MetaObjectHandler {
+
+    @Override
+    public void insertFill(MetaObject metaObject) {
+        log.info("start insert fill ....");
+        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
+    }
+
+    @Override
+    public void updateFill(MetaObject metaObject) {
+        log.info("start update fill ....");
+        // 默认提供的strictUpdateFill为有值不覆盖, gmtModified需要覆盖,利用通用塞值的方法填充
+        this.setFieldValByName("updateTime", new Date(), metaObject);
+    }
+
+}

+ 29 - 0
src/main/java/com/persagy/ccontinue/entity/BaseEntity.java

@@ -0,0 +1,29 @@
+package com.persagy.ccontinue.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: lixing
+ * @company: Persagy Technology Co.,Ltd
+ * @since: 2020/9/16 4:07 下午
+ * @version: V1.0
+ **/
+@Data
+public class BaseEntity<T> extends Model {
+    /**
+     * createTime
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+}

+ 3 - 1
src/main/java/com/persagy/ccontinue/entity/BinlogPosition.java

@@ -7,6 +7,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
+import java.util.Date;
+
 /**
  * 记录当前监听位置的事件
  *
@@ -15,7 +17,7 @@ import lombok.experimental.Accessors;
 @NoArgsConstructor
 @Accessors(chain = true)
 @TableName("v_hydomc_binlog_position")
-public class BinlogPosition {
+public class BinlogPosition extends BaseEntity<BinlogPosition> {
     /***
      * 主键id,自增
      */

+ 68 - 0
src/main/java/com/persagy/utils/DBUtil.java

@@ -0,0 +1,68 @@
+package com.persagy.utils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.sql.*;
+
+@Component
+@Slf4j
+public class DBUtil {
+
+    // 指定监听的数据表
+    @Value("${spring.datasource.dynamic.datasource.wd.url}")
+    private String dbUrl;
+
+    @Value("${binlog.user}")
+    private String user;
+
+    @Value("${binlog.password}")
+    private String password;
+
+    /*
+     * 获取数据库的连接
+     */
+    public  Connection getConnection(){
+        Connection conn = null;
+        try {
+            conn = DriverManager.getConnection( dbUrl,user, password);
+        } catch (SQLException e) {
+            // TODO Auto-generated catch block
+           log.error("获取数据库连接失败:{}",e);
+        }
+        return conn;
+    }
+
+    /*
+     * 关闭数据库的连接
+     */
+    public  void close(Connection conn){
+        if(conn!=null){
+            try {
+                conn.close();
+            } catch (SQLException e) {
+                // TODO Auto-generated catch block
+                log.error("关闭数据库连接失败:{}",e);
+            }
+        }
+    }
+    public  String queryBinlogName(String sql) throws SQLException{
+        //获取数据库连接
+        Connection conn = getConnection();
+        //通过拼接构建SQL语句
+        StringBuilder sb = new StringBuilder();
+        sb.append(sql);
+        //执行SQL语句
+        PreparedStatement ps =conn.prepareStatement(sb.toString());
+        System.out.println(sb.toString());
+        ResultSet rs = ps.executeQuery();
+        //提取查询结果
+        String binlogName = "";
+        while(rs.next()){
+            binlogName = rs.getString("log_name");
+        }
+        close(conn);
+        return binlogName;
+    }
+
+}

+ 3 - 3
src/main/resources/sql/rwd/v_hydomc_binlog_position.sql

@@ -1,13 +1,9 @@
 CREATE TABLE `v_hydomc_binlog_position` (
   `id` bigint(255) NOT NULL AUTO_INCREMENT,
   `binlog_name` varchar(255) DEFAULT NULL COMMENT 'binglog文件名',
   `position` bigint(255) DEFAULT NULL COMMENT 'binglog位置信息',
   `server_id` bigint(255) DEFAULT NULL COMMENT '监听数据库的serverId',
+  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
   PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
-
-INSERT INTO `v_hydomc_binlog_position`( `binlog_name`) VALUES ( "mysql-bin.xxxx");
+) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4;