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(); }