首页 > 代码库 > 自定义spring schema简化与canal集成

自定义spring schema简化与canal集成

canal是阿里巴巴团队基于数据库日志增量订阅&消费的框架,项目中我们经常使用Spring来集成管理其它框架,本文讲述自定义spring xsd schema的方式配置集成canal到Spring容器.

项目地址:http://git.oschina.net/damivip/spring-xsd-canal

使用canal可以清楚的知道数据库记录的IUD的具体内容。

  • 新增:可解析出新增数据的字段和内容

  • 删除:可解析出删除数据的行所有内容

  • 更新:可解析出更新记录前后的字段内容,和更新的字段是哪些


1.应用场景:

B2C网站更新订单(用户下单/退单),订单业务相关的其他非实时服务需要被通知。

常规方式是B2C使用消息中间件通知其他服务,当DBA因特殊情况直接更改数据库数据时,其他服务就无法得到此消息,而使用canal能知道所有来自数据库的更改,无需其他服务通知,完全的业务解耦。


2.配置预览

自己写了一个简单的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="http://www.mamicode.com/globalCanalInvoke"/>
   <config:tableInvoke>
      <!-- 指定数据库database表tableName 暂不支持通配符方式-->
      <config:invoke database="test" tableName="user">
         <config:bean ref="globalCanalInvoke"/>
      </config:invoke>
   </config:tableInvoke>
</config:canal-config>

hostType 可选:

  • socketCluster:socket集群方式

  • zkCluster:zookeeper集群方式

  • single:但服务器方

destination字段对应canal服务配置中的instance名字;

fetchSize    表示尝试拿记录条数

globalInvoke 所有数据库表IDU操作时,执行globalInvoke制定的javaBean方法

tableInvoke 制定数据库和表执行IDU操作时,调用特定javaBean的方法

3. 测试用例

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

详细内容参考:http://git.oschina.net/damivip/spring-xsd-canal

自定义spring schema简化与canal集成