我的目标是定期在两个数据库之间同步数据。一个是运行 MySQL 8 的“新”数据库,另一个是运行 MySQL 5 的尚未完全停用的“旧”数据库。我想双向同步,这意味着对于我要同步的某些表从旧到新,其他我正在从新到旧同步。
我的目标是使用 JDBC 从单个 Java 项目中完成此操作。我正在使用 MySQL Connector/J。最新版本8.4.0仅支持MySQL 8及以上版本。相反,连接器版本 5.1.49 不适用于 MySQL 8。
我尝试过使用多个模块,但这感觉很奇怪。假设模块 A 依赖于模块 B:
我尝试手动将驱动程序类名设置为 MySQL 5,但这不起作用。
您遇到的问题是您需要同一库的两个版本,并且您不知道如何将它们都嵌入到类路径中。两者中只有第一个有效。
但是,您可以做的是将您的申请分为三个部分。其中一种是常见的,一种是 MySQL 5 相关的,一种是 MySQL 8 相关的。公共部分允许控制其他两个并交换数据。其他两部分接管通信,主要通过 JDBC 驱动程序进行。
技巧是将这些不同的部分放在单独的类加载器上,这将允许您在一个 JVM 中同时运行两个 JDBC 驱动程序。它的工作方式与一个 Servlet 容器中的多个 Web 应用程序相同 - 并且每个应用程序都带有自己的某个库版本。
有很多资源可以帮助您处理自己的类加载器。这是其中之一: https://docs.oracle.com/javase/tutorial/ext/basics/index.html
可能您甚至不必关心创建罐子。 JDBC 驱动程序已经是 jar 文件,您需要的只是类加载器和一些控制逻辑(我之前提到的公共部分)。