3

我需要编写一个 Java 应用程序(基于 Web),它将连接到 Oracle 11G 数据库(当前正在连接 10-12 个不同的 Oracle 数据库),从中读取一些数据(都是选择查询)。

迭代此数组列表后,我连接每个数据库,触发选择查询(我为所有数据库触发相同的查询),获取记录,将其放入一个全局集合列表中并关闭连接并在此循环中继续相同的过程。

目前我是连接多个数据库的“执行者”。再次使用 ExecutorService executor = Executors.newFixedThreadPool(20); 给我一个惊喜。对于创建第一个数据库连接,它会显示即时日志,但对于后续数据库连接,它会在 60 秒后打印日志,所以我不明白为什么所有连接都需要 60 秒或更长时间?从逻辑上讲,所有连接都应该花费时间。

请建议此应用程序的性能改进。

4

1 回答 1

0

打开数据库连接是一项昂贵的操作;如果可能,您应该连接到每个数据库一次,并为对该数据库进行的所有查询重用该连接(也称为连接池)。目前尚不清楚这是否是您已经在做的事情。

另一件看起来很奇怪的事情是您已经同步了 openConnection 方法。我认为没有必要这样做,并且根据您的代码的结构,这可能意味着在给定时间只有一个线程可以打开连接。由于连接需要很长时间,您希望每个线程并行连接。

于 2013-08-10T09:28:48.980 回答