升级JDBC驱动可能会遇到的问题
最近因为项目使用的 MySQL 数据库升级,Java 应用所使用的 MySQL Connector/J 驱动程序也需要同步升级,然而升级后却遇到了一些问题…
最近因为项目使用的 MySQL 数据库升级,Java 应用所使用的 MySQL Connector/J 驱动程序也需要同步升级,然而升级后却遇到了一些问题…
最近在维护一个基于 Spring Boot 的数据同步系统。项目使用 druid 连接池,配置动态数据源连接了 16 个数据库,主要用于跑任务处理跨库数据同步。其中的某个任务,在线上环境一直稳定运行,前几天任务又一次执行时,突然收到任务报错的邮件告警。
最近项目里需要跨数据库同步大批量数据(百万到千万级别),以前都是用 JDBC 来实现。在 JDBC 里,我们能灵活地使用流查询来批次摄取处理,避免OOM,但 JDBC 这玩意儿写多了,谁都会嫌它既啰嗦又繁琐(但性能真香)。于是这次决定用 Springboot + Mybatis 框架来试试。因为涉及到多个数据源和不同的数据库产品(Oracle、PostgreSQL、MySQL),所以在项目里使用了动态数据源。
关于 Springboot 多数据源方案,我参考过最好的文章为下面的3连载,推荐一看。
至于使用 Mybatis 做大批量数据读取和插入,先前也是阅读了大量的参考资料和文档。总体思想跟 JDBC 是一致的,即:流式查询、批次插入。但在讲 Mybatis 之前,先回顾一下 JDBC 时代是怎么做的吧。
在 Java简明笔记(十三)JDBC 中,使用 JDBC 来操作数据库,并把查询到的数据库信息进行 java 对象的映射(ORM),但是 JDBC 除了需要自己写SQL之外,还必须操作Connection, Statment, ResultSet,显得繁琐和枯燥。于是我们对 JDBC 进行封装,以简化数据库操作。mybatis就是这样的一个框架。
以下简介摘自官方文档:
MyBatis是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。