最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合canal實現(xiàn)數(shù)據(jù)同步的示例代碼

 更新時間:2022年03月18日 08:35:21   作者:鄭清  
本文主要介紹了SpringBoot整合canal實現(xiàn)數(shù)據(jù)同步,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、前言

canal:阿里巴巴 MySQL binlog 增量訂閱&消費組件
https://github.com/alibaba/canal

tips: 環(huán)境要求和配置參考 https://github.com/alibaba/canal/wiki/AdminGuide

這里額外提下Redis緩存和MySQL數(shù)據(jù)一致性解決方案

  • 延時雙刪策略
  • 異步更新緩存(基于訂閱binlog的同步機制)

我們的canal即可作為MySQL binlog增量訂閱消費組件+MQ消息隊列將增量數(shù)據(jù)更新到redis

二、docker-compose部署canal

tips: 詳情可查看 https://gitee.com/zhengqingya/docker-compose

# 準(zhǔn)備
git clone https://gitee.com/zhengqingya/docker-compose.git
cd docker-compose/Liunx

# 導(dǎo)入初始化SQL
Liunx/canal/canal_admin/canal_manager.sql

# 運行  (tips:先修改配置文件信息)
docker-compose -f docker-compose-canal.yml -p canal up -d

相關(guān)配置文件

在這里插入圖片描述

docker-compose-canal.yml

# 可參考 https://github.com/alibaba/canal/wiki/QuickStart

version: '3'

# 網(wǎng)橋canal -> 方便相互通訊
networks:
  canal:

services:
  canal_admin:
    image: registry.cn-hangzhou.aliyuncs.com/zhengqing/canal-admin:v1.1.5      # 原鏡像`canal/canal-admin:v1.1.5`
    container_name: canal_admin               # 容器名為'canal_admin'
    restart: unless-stopped                   # 指定容器退出后的重啟策略為始終重啟,但是不考慮在Docker守護進程啟動時就已經(jīng)停止了的容器
    volumes: # 數(shù)據(jù)卷掛載路徑設(shè)置,將本機目錄映射到容器目錄
      - "./canal/canal-admin/bin/startup.sh:/home/admin/canal-admin/bin/startup.sh"
      - "./canal/canal-admin/logs:/home/admin/canal-admin/logs"
    environment: # 設(shè)置環(huán)境變量,相當(dāng)于docker run命令中的-e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      canal.adminUser: admin
      canal.adminPasswd: 123456
      spring.datasource.address: www.zhengqingya.com:3306
      spring.datasource.database: canal_manager
      spring.datasource.username: root
      spring.datasource.password: root
    ports:
      - "8089:8089"
    networks:
      - canal

  canal_server:
    image: registry.cn-hangzhou.aliyuncs.com/zhengqing/canal-server:v1.1.5      # 原鏡像`canal/canal-server:v1.1.5`
    container_name: canal_server              # 容器名為'canal_server'
    restart: unless-stopped                   # 指定容器退出后的重啟策略為始終重啟,但是不考慮在Docker守護進程啟動時就已經(jīng)停止了的容器
    volumes:                                  # 數(shù)據(jù)卷掛載路徑設(shè)置,將本機目錄映射到容器目錄
      - "./canal/canal-server/logs:/home/admin/canal-server/logs"
    environment:                              # 設(shè)置環(huán)境變量,相當(dāng)于docker run命令中的-e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      canal.register.ip: www.zhengqingya.com
      canal.admin.manager: canal_admin:8089
      canal.admin.port: 11110
      canal.admin.user: admin
      canal.admin.passwd: 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
    ports:
      - "11110:11110"
      - "11111:11111"
      - "11112:11112"
    depends_on:
      - canal_admin
    links:
      - canal_admin
    networks:
      - canal

訪問地址:http://ip地址:8089
默認登錄賬號密碼:admin/123456

在這里插入圖片描述

在這里插入圖片描述

三、canal-admin可視化管理

tips: 頁面使用自行多點點就會了^_^
將數(shù)據(jù)投遞到RabbitMQ配置為例,附帶些其中重要的配置信息
mq的交換機和隊列可通過后面java代碼自動生成,無需自己手動建立

1、canal.properties

# canal admin config
#canal.admin.manager = 127.0.0.1:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

# tcp, kafka, rocketMQ, rabbitMQ
canal.serverMode = rabbitMQ

rabbitmq.host = www.zhengqingya.com:5672
rabbitmq.virtual.host = my_vhost
rabbitmq.exchange = canal.exchange
rabbitmq.username = admin
rabbitmq.password = admin

2、example/instance.propertios

canal.instance.master.address=www.zhengqingya.com:3306
# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8

# table regex 只同步test數(shù)據(jù)庫下的t_user表
canal.instance.filter.regex=test\\.t_user
# table black regex
canal.instance.filter.black.regex=mysql\\.slave_.*

# mq config
canal.mq.topic=canal_routing_key

四、springboot整合canal實現(xiàn)數(shù)據(jù)同步

1、pom.xml引入mq依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2、application.yml配置

# RabbitMQ配置
spring:
  rabbitmq:
    addresses: www.zhengqingya.com:5672,www.zhengqingya.com:5673 # 指定client連接到的server的地址,多個以逗號分隔
    # 填寫自己安裝rabbitmq時設(shè)置的賬號密碼,默認賬號密碼為`guest`
    username: admin
    password: admin
    virtual-host: my_vhost # 填寫自己的虛擬機名,對應(yīng)可查看 `127.0.0.1:15672/#/users` 下Admin中的`Can access virtual hosts`信息

3、mq監(jiān)聽canal消息數(shù)據(jù)

@Slf4j
@Component
public class CanalRabbitMqListener {

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue(value = MqConstant.CANAL_QUEUE, durable = "true"),
                    exchange = @Exchange(value = MqConstant.CANAL_EXCHANGE),
                    key = MqConstant.CANAL_ROUTING_KEY
            )
    })
    public void handleCanalDataChange(String message) {
        log.info("[canal] 接收消息: {}", JSON.toJSONString(message));
    }

}
public interface MqConstant {

    String CANAL_EXCHANGE = "canal.exchange";
    String CANAL_QUEUE = "canal_queue";
    String CANAL_ROUTING_KEY = "canal_routing_key";

}

4、測試

先啟動項目讓程序自動建立所需mq中的交換機和隊列

在這里插入圖片描述

再修改canal監(jiān)聽的表數(shù)據(jù)

在這里插入圖片描述

查看程序監(jiān)聽的mq消息數(shù)據(jù)如下,拿到數(shù)據(jù)就可以進行數(shù)據(jù)解析處理了…

在這里插入圖片描述

五、canal-spring-boot-starter

tips: 可參考 https://github.com/NormanGyllenhaal/canal-client

此方式需將canal.properties配置文件中的canal.serverMode屬性值修改為tcp

在這里插入圖片描述

1、pom.xml中引入依賴

<!-- https://mvnrepository.com/artifact/top.javatool/canal-spring-boot-starter -->
<dependency>
    <groupId>top.javatool</groupId>
    <artifactId>canal-spring-boot-starter</artifactId>
    <version>1.2.1-RELEASE</version>
</dependency>

2、application.yml配置

canal:
  server: www.zhengqingya.com:11111
  destination: example # tips:canal-admin中Instance管理下需存在example實例配置

3、監(jiān)聽canal數(shù)據(jù) – 訂閱數(shù)據(jù)庫增刪改操作

@Slf4j
@Component
@CanalTable(value = "t_user")
public class UserHandler implements EntryHandler<User> {

    @Override
    public void insert(User user) {
        log.info("insert message  {}", user);
    }

    @Override
    public void update(User before, User after) {
        log.info("update before {} ", before);
        log.info("update after {}", after);
    }

    @Override
    public void delete(User user) {
        log.info("delete  {}", user);
    }

}
@Data
@Table(name = "t_user")
public class User implements Serializable {

    /**
     * 主鍵
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Integer userId;

    /**
     * 用戶名
     */
    @Column(name = "username")
    private String username;

    /**
     * 密碼
     */
    @Column(name = "password")
    private String password;

    /**
     * 性別
     */
    @Column(name = "sex")
    private Integer sex;

    /**
     * 備注
     */
    private String remark;

    /**
     * 時間
     */
    private Date date;

}

經(jīng)測試發(fā)現(xiàn)這個jar存在一些bug,ex:針對表字段,數(shù)據(jù)原本為空,修改為有值的時候,如果java這邊用非String字段類型去接收會報錯!

在這里插入圖片描述

本文案例demo源碼

https://gitee.com/zhengqingya/java-workspace

到此這篇關(guān)于SpringBoot整合canal實現(xiàn)數(shù)據(jù)同步的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot canal數(shù)據(jù)同步內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot攔截器讀取流后不能再讀取的問題

    SpringBoot攔截器讀取流后不能再讀取的問題

    這篇文章主要介紹了SpringBoot攔截器讀取流后不能再讀取的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring MVC 中獲取session的幾種方法(小結(jié))

    Spring MVC 中獲取session的幾種方法(小結(jié))

    這篇文章主要介紹了Spring MVC 中獲取session的幾種方法(小結(jié)),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 如何在springboot中使用定時任務(wù)

    如何在springboot中使用定時任務(wù)

    這篇文章主要介紹了如何在springboot中使用定時任務(wù),幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-12-12
  • Java設(shè)計模式開發(fā)中使用觀察者模式的實例教程

    Java設(shè)計模式開發(fā)中使用觀察者模式的實例教程

    這篇文章主要介紹了Java設(shè)計模式開發(fā)中使用觀察者模式的實例教程,松耦合和邏輯清晰的消息監(jiān)聽是觀察者模式的大特色,需要的朋友可以參考下
    2016-04-04
  • java虛擬機鉤子關(guān)閉函數(shù)addShutdownHook的操作

    java虛擬機鉤子關(guān)閉函數(shù)addShutdownHook的操作

    這篇文章主要介紹了java虛擬機鉤子關(guān)閉函數(shù)addShutdownHook的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • IDEA Maven下載依賴包速度過慢的問題及解決方案

    IDEA Maven下載依賴包速度過慢的問題及解決方案

    這篇文章主要介紹了IDEA Maven下載依賴包速度過慢的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java 實現(xiàn)約瑟夫環(huán)的實例代碼

    java 實現(xiàn)約瑟夫環(huán)的實例代碼

    這一次是借鑒模仿別人寫的代碼,以前覺得不好將數(shù)據(jù)結(jié)構(gòu)的鏈結(jié)構(gòu)什么的遷移到j(luò)ava上來使用,但這一次確實讓我感受到了可以自己構(gòu)造數(shù)據(jù)結(jié)構(gòu),然后使用類似鏈的方式來解決約瑟夫環(huán),有所頓悟。不多說,繼續(xù)上代碼
    2013-10-10
  • springboot集成redisson的三種方式

    springboot集成redisson的三種方式

    本文主要介紹了springboot集成redisson的三種方式,包含自定義配置+手動注入,使用Yaml方式批量讀取配置和spring boot自動配置類這三種,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • SpringBoot集成Kafka的實現(xiàn)示例

    SpringBoot集成Kafka的實現(xiàn)示例

    本文主要介紹了SpringBoot集成Kafka的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 解決idea npm:無法將“npm”項識別為cmdlet、函數(shù)、腳本文件或可運行程序的名稱問題

    解決idea npm:無法將“npm”項識別為cmdlet、函數(shù)、腳本文件或可運行程序的名稱問題

    在IDEA中運行npm命令時出現(xiàn)無法識別的錯誤,通常是由于npm環(huán)境變量配置不正確引起,解決方法包括以管理員身份運行IDEA,確認node和npm是否正確安裝及配置環(huán)境變量,需要在系統(tǒng)環(huán)境變量中添加node.js的安裝路徑,并設(shè)置npm的全局模塊和緩存路徑
    2024-10-10

最新評論

陆川县| 西华县| 西城区| 乳源| 靖边县| 天长市| 南丹县| SHOW| 林口县| 绥滨县| 开封县| 元阳县| 门源| 石棉县| 铜川市| 道孚县| 平罗县| 潞城市| 澄城县| 大渡口区| 安平县| 开江县| 淮北市| 原平市| 贵州省| 日照市| 临猗县| 镇雄县| 商河县| 栾城县| 平顶山市| 社旗县| 榕江县| 普兰店市| 图木舒克市| 苗栗市| 桃园市| 娄烦县| 东海县| 将乐县| 宜君县|