【问题标题】:MySQL jdbc connection takes too longMySQL jdbc 连接耗时过长
【发布时间】:2014-09-18 05:29:56
【问题描述】:

我正在尝试连接到 mysql 服务器,但这需要 5 秒。

showTime();
Class.forName("com.mysql.jdbc.Driver");
conn = (Connection) DriverManager.getConnection("jdbc:mysql://192.168.1.212:3306/db",username.getText(),password.getText());
showTime();

【问题讨论】:

  • 分享最少且完整的可测试代码。
  • 您的连接可能很慢或服务器可能负载过重
  • 数据库几乎是空的 ~100 行,它相对较快。对于 700 多行,只需 5 秒或更长时间即可连接。
  • 您能否向我们展示一些您在这里尝试执行的代码,以便我们找出耗时过长的原因?也许它不在连接设置中
  • 我只是为 JFrame 创建布局,仅此而已。上面的代码在 Action Listener 中。两个 showTime() 之间有 5 秒的暂停。

标签: java mysql jdbc


【解决方案1】:

我建议您使用 Connection Pool 连接已经创建并存储在池中,而不是在运行时创建。

在软件工程中,连接池是维护的数据库连接缓存,以便在以后需要对数据库的请求时可以重复使用这些连接。

连接池用于增强在数据库上执行命令的performance

我已经分享了一个很好的 ConnectionUtil 类来管理整个应用程序的单个类中的所有连接。

使用JNDIdata-source 与应用程序绑定,而不是在java 类本身中硬编码用户名/密码和配置。

Connecting with DataSource Objects上的Java 教程中有更好的解释

DataSource 对象可以提供连接池和分布式事务。此功能对于企业数据库计算至关重要。

StackOverflow Why do we use a DataSource instead of a DriverManager? 上还有一篇文章也对此进行了解释。


Static Initialization Block中移动驱动类加载步骤

static{
    Class.forName("com.mysql.jdbc.Driver");
}

【讨论】:

  • 我在登录点执行此操作。在整个课程中,我都通过了这个 Connection,它工作正常。
  • 你不认为必须在应用程序开始服务请求之前加载数据源。
  • 我刚刚改了,还是 5 秒 :(
  • 我刚试了一下,结果还是一样
  • 我刚用DataSource试了一下,还是需要5秒才能建立连接
【解决方案2】:

Braj 对连接池的看法是正确的,但如果您的应用程序没有在一个沉重的容器中执行,并且只是一个很小的数据库访问,我建议您使用 mysql 客户端测试您的连接以确定哪个部分是慢的(您的应用程序或 DBMS 本身)。

【讨论】:

  • 数据库比较小。该连接与 phpmyadmin 完美结合。建立连接只需要很长时间。
【解决方案3】:

我的问题实际上出在 mysql 服务器上。我正在运行 Windows Server 2008R2,在用尽所有可能的答案后,我决定卸载 Windows 并安装 Ubuntu Server。之后,完全相同的 sn-p 代码完美运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多