Fetch MYSQL's data to K-V style data.
通过配置化的SQL语句将 Mysql 中的数据读取到内存中,形成 KV 格式。
note: json encoding is using Jackson.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<base>
<driverClass>com.mysql.jdbc.Driver</driverClass>
</base>
<dbs dbUrl="jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true"
name="test"
userName="root" password="123456">
<db>
<table keyId="id" name="user" initSql="select * from test.user"/>
</db>
<db name="test2"
dbUrl="jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true"
userName="root" password="123456">
<table keyId="id" name="store" initSql="select * from test2.store"/>
</db>
</dbs>
</configuration>
@Test
public void test() {
IDbFetchController dbFetchController = DbFetchControllerFactory.getDefaultDbController();
dbFetchController.init("canalx-db-kv.xml");
Map<String, Map<String, String>> dbKvs = dbFetchController.getInitDbKv();
for (String tableId : dbKvs.keySet()) {
System.out.println("table identify: " + tableId);
System.out.println("table kv:" + dbKvs.get(tableId));
}
}
table identify: test2.store
table kv:{1={"id":1,"name":"product1","products":100}}
table identify: test.user
table kv:{1={"id":1,"name":"user1","phone":"123456789"}}
<dependency>
<groupId>com.github.knightliao.canalx</groupId>
<artifactId>canalx-select-db-json</artifactId>
<version>0.0.2</version>
</dependency>