SpringBoot は Canal を統合します
準備
運河とは
- Canal は、データベース増分ログ解析に基づく Alibaba のオープンソース データ同期およびサブスクリプション コンポーネントであり、MySQL や Oracle などの主流データベースをサポートしています。
- データベースの増分ログを解析することで、データベース変更イベントを下流のコンシューマーに転送します。
Spring Boot における Canal の役割と利点
- Spring Boot は Spring アプリケーション開発を簡素化するために使用されるフレームワークで、Spring アプリケーションを構築するための高速かつ便利な方法を提供します。
- Canal は、Spring Boot で信頼性の高い高性能リスニング ツールとして使用し、データベース変更イベントをリアルタイムでキャプチャできます。
- Canalを統合することで、Spring BootでMySQLテーブルデータを簡単に監視でき、きめ細かいデータ同期やサブスクリプションなどの機能を実現できます。
準備
MySQL データベースのインストールと構成
- MySQL データベースをインストールし、データベースが正常に動作することを確認します。
- binlog を有効にしてデータベースを監視するように設定します。MySQL 設定ファイルを編集する
my.cnf
か、次の設定をセクションmy.ini
に追加します。[mysqld]
# 日志文件名
log-bin=mysql-bin
# 配置日志记录模式为“行级模式”
binlog_format=ROW
# 需要监听的数据库1
binlog-do-db=ddz
# 需要监听的数据库2
binlog-do-db=ddz1
- データベースを再起動し、データベースが正常に開かれるかどうかを確認します。
# 查看是否开启日志
show variables like '%log_bin%';
# 查看日志记录模式
show variables like '%binlog_format%';
インストールカナル
- カナル公式サイトからサービスアイテムをダウンロードしてください。
以下は、Canal のいくつかのコンポーネントの詳細な説明です。
canal.adapter は、主にデータの同期と変換に使用されるアダプターである Canal のサブプロジェクトです。
canal.admin は、Canal のバックエンド管理システムです。
canal.deployer は、ワンクリックの導入および管理機能を提供し、Canal の導入、運用および保守を簡素化できます。
canal.exampleは Canal のサンプルプロジェクトです。
- ファイルを解凍して
\canal.deployer-1.1.7-SNAPSHOT\conf\canal.properties
ファイルを変更し、プロジェクトで使用する必要があるサービス モードを選択しますtcp
。
# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ
canal.serverMode = tcp
\canal.deployer-1.1.7-SNAPSHOT\conf\example\instance.properties
ファイルを変更します。
# 需要监听的数据库连接地址
canal.instance.master.address=127.0.0.1:3306
# 用户名
canal.instance.dbUsername=数据库用户名
# 密码
canal.instance.dbPassword=数据库密码
# 需要监听的数据库正则,当前是监听所有的数据库
canal.instance.filter.regex=.*\\..*
# 不监听的数据库正则
canal.instance.filter.black.regex=mysql\\.slave_.*
- Canal プロジェクトを開始するには、
\canal.deployer-1.1.7-SNAPSHOT\bin
、start 、startup.bat
またはを入力しますstartup.sh
。
次のページがポップアップ表示され、起動が成功したことが示されます。
プロジェクトの統合
依存関係をインポートする
ここでインポートするのは、ボスによってカプセル化された依存関係であり、それらを直接使用できます。
<dependency>
<groupId>top.javatool</groupId>
<artifactId>canal-spring-boot-starter</artifactId>
<version>1.2.1-RELEASE</version>
</dependency>
構成情報の追加
canal:
server: 127.0.0.1:11111 # 本地启动的canal服务,默认启动的监听端口是11111
destination: example # 配置好的监听模块
リスニングモジュールの名前はディレクトリ名と同じであり、運河設定ファイルでも同じように設定されます。
リスニングクラスを作成する
アノテーションの使用: @CanalTable(value = “データベーステーブル名”)
import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;
@Slf4j
@Component
@CanalTable(value = "user")
public class UserHandler implements EntryHandler<User> {
@Override
public void insert(User user) {
log.info("User_insert:{}", user.toString());
}
@Override
public void update(User before, User after) {
log.info("User_update_before:{}", before.toString());
log.info("User_update_after:{}", after.toString());
}
@Override
public void delete(User user) {
log.info("User_delete:{}", user.toString());
}
}
テスト
これで、データベースを操作するときに、テーブルの追加、変更、削除が監視されます。