如何从单个项目以编程方式与 MySQL 5 数据库和 MySQL 8 数据库交互?

问题描述 投票:0回答:1

我的目标是定期在两个数据库之间同步数据。一个是运行 MySQL 8 的“新”数据库,另一个是运行 MySQL 5 的尚未完全停用的“旧”数据库。我想双向同步,这意味着对于我要同步的某些表从旧到新,其他我正在从新到旧同步。

我的目标是使用 JDBC 从单个 Java 项目中完成此操作。我正在使用 MySQL Connector/J。最新版本8.4.0仅支持MySQL 8及以上版本。相反,连接器版本 5.1.49 不适用于 MySQL 8。

我尝试过使用多个模块,但这感觉很奇怪。假设模块 A 依赖于模块 B:

  • 如果 A 依赖于连接器 5.1.49,B 依赖于连接器 8.4.0,则一切正常。
  • 如果 A 依赖于连接器 8.4.0,B 依赖于连接器 5.1.49,则从模块 B 对 MySQL 5 数据库的查询的行为就像模块 B 使用连接器 8.4.0 一样。

我尝试手动将驱动程序类名设置为 MySQL 5,但这不起作用。

java mysql jdbc mysql5
1个回答
0
投票

您遇到的问题是您需要同一库的两个版本,并且您不知道如何将它们都嵌入到类路径中。两者中只有第一个有效。

但是,您可以做的是将您的申请分为三个部分。其中一种是常见的,一种是 MySQL 5 相关的,一种是 MySQL 8 相关的。公共部分允许控制其他两个并交换数据。其他两部分接管通信,主要通过 JDBC 驱动程序进行。

技巧是将这些不同的部分放在单独的类加载器上,这将允许您在一个 JVM 中同时运行两个 JDBC 驱动程序。它的工作方式与一个 Servlet 容器中的多个 Web 应用程序相同 - 并且每个应用程序都带有自己的某个库版本。

有很多资源可以帮助您处理自己的类加载器。这是其中之一: https://docs.oracle.com/javase/tutorial/ext/basics/index.html

可能您甚至不必关心创建罐子。 JDBC 驱动程序已经是 jar 文件,您需要的只是类加载器和一些控制逻辑(我之前提到的公共部分)。

© www.soinside.com 2019 - 2024. All rights reserved.