一、 携程 Dal 开源框架
Dal 是携程开源的数据库访问框架,为大规模的 DB 管理和使用提供一套优质的解决方案。
首先在 DB 管理方面,Dal 统一集成了主流程的数据访问:支持 Java 和 C# 客户端;支持 MySQL 、SQLServer 数据库;支持 ORM 和非 ORM 方式的数据访问;使用了 Emit 映射技术,提供高性能 ORM;多数据源访问和主从分离(读写分离);日志、监控集成。
其次在 DB 使用方面, Dal 支持代码生成。通过 Dal 平台,可一键生成 Entity、Dao、Unit Test。这不仅可以让开发者脱离 DB 编程、提升开发效率,还可以统一面向 DB 的代码风格和代码质量。
二、 DataX 与 Dal 的兼容
Dal 的主要特点是统一收口和集中管理,在 DB 连接方面,客户端无需配置 DB 的用户名和密码,只需要配置 Dal 提供的 TitanKey 或 ClusterName 即可。简单来说,TitanKey 或 ClusterName 就是 Dal 生成的,供客户端的访问 DB 的钥匙。也正因此,DataX 在 Dal 架构的系统上就不起作用了。需要解决两个问题:DataX 如何配置 TitanKey 或 ClusterName;DataX 如何通过 Dal 获取数据源。
三、 Datax 配置 TitanKey 或 ClusterName
这是 mysqlwriter 的配置信息模板:
1 | { |
Dal 不关心 username 和 password,不妨将 TitanKey 或 ClusterName放在 jdbcurl处。
四、DataX 获取 Dal 数据源
DataX 通过如下方式获取数据连接:
1 | private static synchronized Connection connect(DataBaseType dataBaseType, String url, Properties prop) { |
Dal 通过如下方式获取数据连接:
1 | import javax.annotation.Resource; |
综上:借助 DataSource 工厂,就可以用 Dal 数据连接替换掉 DataX 的数据连接。
五、DataX 兼容 Dal 优化
从以上实现可以看出,获取 Dal 数据连接主要有两步:生成数据源和建立数据连接,并且每次数据同步都要重复一遍。既然 Dal 已经提供了 DataSource 工厂,是否可以考虑将数据源缓存下来呢?
所以,有一套更好的兼容方案:在工具启动过程中,加载数据源并缓存下来, dbName 作为查找数据源的 key。
DataSourceConfiguration.class
1 | import com.alibaba.datax.plugin.rdbms.util.DBUtil; |
DBUtil.class
1 | import com.alibaba.datax.common.exception.DataXException; |








































