canal是阿里巴巴團隊基於數據庫日誌增量訂閱&消費的框架,項目中咱們常用Spring來集成管理其它框架,本文講述自定義spring xsd schema的方式配置集成canal到Spring容器.java
項目地址:http://git.oschina.net/damivip/spring-xsd-canalgit
使用canal能夠清楚的知道數據庫記錄的IUD的具體內容。spring
新增:可解析出新增數據的字段和內容數據庫
刪除:可解析出刪除數據的行全部內容服務器
更新:可解析出更新記錄先後的字段內容,和更新的字段是哪些app
B2C網站更新訂單(用戶下單/退單),訂單業務相關的其餘非實時服務須要被通知。框架
常規方式是B2C使用消息中間件通知其餘服務,當DBA因特殊狀況直接更改數據庫數據時,其餘服務就沒法獲得此消息,而使用canal能知道全部來自數據庫的更改,無需其餘服務通知,徹底的業務解耦。socket
本身寫了一個簡單的spring xsd schema,簡化canal配置,以下:測試
<config:canal-config id="singleCanalClient" destination="example" fetchSize="1" host="localhost:2181,localhost:2182,localhost:2183" hostType="zkCluster"> <!-- 處理全部庫表IUD--> <config:globalInvoke value="globalCanalInvoke"/> <config:tableInvoke> <!-- 指定數據庫database表tableName 暫不支持通配符方式--> <config:invoke database="test" tableName="user"> <config:bean ref="globalCanalInvoke"/> </config:invoke> </config:tableInvoke> </config:canal-config>
hostType 可選:fetch
socketCluster:socket集羣方式
zkCluster:zookeeper集羣方式
single:但服務器方
destination字段對應canal服務配置中的instance名字;
fetchSize 表示嘗試拿記錄條數
globalInvoke 全部數據庫表IDU操做時,執行globalInvoke制定的javaBean方法
tableInvoke 制定數據庫和表執行IDU操做時,調用特定javaBean的方法
@Test public void testStartClient() throws Exception { String xml = "classpath:conf/applicationContext.xml"; ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { xml }); System.out.println(context.getBean("singleCanalClient")); System.in.read(); }