自定义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="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

时间: 2024-10-13 11:35:04

自定义spring schema简化与canal集成的相关文章

spring schema自定义

今天看了一下分布式服务框架的那本书,于是里面提到了spring schema的自定义,于是去简单的了解了一下 参考资源:spring schema扩展: http://www.yihaomen.com/article/java/438.htm schema定义:http://www.w3school.com.cn/schema/schema_schema.asp spring schema扩展:http://blog.csdn.net/cutesource/article/details/586

spring security与cas client集成(无http标签方式)

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema

spring boot 1.5.4 集成spring-Data-JPA(七)

上一篇:springboot 1.5.4 集成JdbcTemplate(六) 1      Spring Boot使用Spring-Data-JPA访问数据库 spring boot整合jdbcTemplate项目源码: https://git.oschina.net/wyait/springboot1.5.4.git 1.1  Sping data JPA简介 关于Spring Data jpa这里就不详细做说明,只简单的介绍一下: 由于Spring-data-jpa依赖于Hibernate.

Spring Schema扩展机制

1:概述 Spring2.0开始,Spring提供XML Schema可扩展机制,用户可以自定义XML Schema文件,并自定义 XML Bean解析器,集成到Spring IOC容器中. 2:步骤: 创建一个XML Schema文件,描述自定义的合法构建模块,也就是xsd文件. 自定义处理器类,并实现NamespaceHandler接口. 自定义一个或者多个解析器,实现BeanDefinitionParser接口(关键部分). 注册上面的组建到Spring IOC容器. 3:示例如下: (1

自定义spirng schema

spring已经为我们提供了很丰富的xml元素,但是有时候我们需要自己扩展spring schema来定制标签,spring已经为我们提供了扩展的api,使用起来非常方便.本片文章来自于spring官网的教程. 如果要定义自己的schema,通常有如下几步: 1.自定义xml schema,在这里是编写自己的xsd文件,xsd文件可以理解为描述xml文件的元文件,定义了一个xml文件中可以有哪些元素等等一些规则. 2.编写自己的NamespaceHandler. 3.编写自定义BeanDefin

Spring学习(五)——集成memcached客户端

memcached是高性能的分布式内存缓存服务器.许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现RDBMS的负担加重.数据库响应恶化. 网站显示延迟等重大影响.memcached特别适合 用来解决上述问题,它可以缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度. 提高可扩展性.本例将在前一篇中 实现的Demo程序基础上集成memcached客户端. 1.单个服务端安装部署 官网http://memca

使用Redisson实现分布式锁,Spring AOP简化之

源码 Redisson概述 Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid).它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务.其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publi

Webx框架:Spring Schema 和 Spring Ext

webx诞生的原因是当时市面上没有好用的web框架.现在的Web框架有很多,然后它们背后的思想都是相似的,而且越来越趋同. Spring Schema 在传统的spring中,配置bean时需要手动去指定具体的实现类是什么,参数有哪些.这样开发者需要记住具体的实现类.参数名称.含义等,会带来很大的记忆负担.为了解决这个问题,SpringSchema出现了.它的解决办法是将所有的参数转换成标签.标签是可以通过XML Schema定义的.这样只需要记忆标签的名字即可.标签的名称一般都很短,因此减轻了

Spring学习(五)——集成MyBatis

本篇我们将在上一篇http://www.cnblogs.com/wenjingu/p/3829209.html的Demo程序的基础上将 MyBatis 代码无缝地整合到 Spring 中. 数据库仍然采用前一篇文章中定义的数据库sampledb. 1.修改gradle文件,增加依赖包,代码如下: apply plugin: 'idea' apply plugin: 'java' repositories { mavenCentral() maven { url "http://repo.spri