Java 高效地连接到多个数据库

Java 高效地连接到多个数据库,java,database-connection,connection-string,Java,Database Connection,Connection String,关于类似问题: 我正在为每个数据库使用不同的连接字符串/驱动程序。这就是我正在做的,不太确定这是否是最有效的方法: 使用getConnection(stringurl、stringuserid、stringpassword)方法为每个数据库的连接创建单独的类 在main类中,获取DB1、DB2、DB3、open connections的连接对象 从DB1获取数据,将其写入平面文件,对DB2和DB3重复此操作 关闭所有三个连接 注意:我读过关于使用Spring/Hibernate/DataSou

关于类似问题:

我正在为每个数据库使用不同的连接字符串/驱动程序。这就是我正在做的,不太确定这是否是最有效的方法:

使用getConnection(stringurl、stringuserid、stringpassword)方法为每个数据库的连接创建单独的类

在main类中,获取DB1、DB2、DB3、open connections的连接对象

从DB1获取数据,将其写入平面文件,对DB2和DB3重复此操作

关闭所有三个连接


注意:我读过关于使用Spring/Hibernate/DataSources/ConnectionPooling的文章,不知道什么应该是最好的选择

您不需要使用单独的类来进行连接,只需构建一个包含所有JDBC URL的util类并从中获得连接即可


此外,您应该考虑使用JPA,而java java中也可以使用JPA。这样,您就可以从低级连接中抽象并定义一个命名的数据源。例如,请参阅。

我的理解是,您希望应用程序在不同的数据库上运行一些(
SELECT
?)查询并转储结果。我认为这是一个更大的应用程序的一部分,因为如果不是这样的话,您可能只需编写一个命令行脚本就可以更快地获得结果,该脚本可以自动化特定数据库的客户机工具

Hibernate、数据源(在Java数据源对象意义上)和连接池不会解决您的问题——我想Spring也是这样,但我不知道您指的是Spring的哪一部分。原因是,它们都被设计为通过单个(或连接池/连接集合)抽象到单个数据库-连接池只允许您保留一个到给定数据库的现成(TCP)连接池,以提高性能,例如通过避免连接和身份验证开销。Hibernate也这样做,因为它将连接抽象到单个数据库(并且可以出于性能原因使用连接池)

我建议你可以采取不同的方法来思考你的问题:

既然您想在某个数据源上运行一些查询并将结果写入某个目标,那么为什么不以这种方式开始您的设计:提出一个接口/类
DataExtractionTask
,它需要一个数据库连接、一组要运行的查询和一些输出流。与直接使用
java.sql.Connection
不同,您可以选择一些框架来简化您的生活,有Hibernate之类的重量级和jdbi之类的轻量级。然后,编写代码来建立数据库连接,决定运行哪些查询和写入哪些输出,并将所有这些信息输入到您的深思熟虑的
DataExtractionTask
中,以运行处理逻辑(协调各个部分)

一旦你有了基本的东西,你可以在上面添加其他功能,你可以使它可配置,你可以选择并行运行多个
DataExtractionTask
s,而不是顺序运行,等等

通过这种方式,您可以概括处理逻辑,然后集中精力准备好处理的所有内容(数据库连接、查询定义等)。我意识到这是一个非常广阔的图景,但也许它让事情变得更容易一些


关于效率:如果你指的是高性能(相对术语!),那么最好的方法就是@Elliott Frisch所写的方法——将所有内容保存在一个数据库中,并使用一个连接池连接到该数据库。

最有效的方法是什么?对数据库进行集群并写入“单个”数据库。谢谢,我们曾想过保留单个数据库,但我想这在我们的情况下是不可行的。至于数据提取逻辑,请同意。感谢您建议使用JDBI,我们将研究它:)