-
✅ 数据库连接超时(Connection Timeout)
-
✅ 查询超时(Query Timeout)
-
✅ 网络连接超时(Socket Timeout / Network Timeout)
-
✅ 各类常见超时类型(如 HTTP、线程等待、锁等待等)
-
✅ 超时机制的原理与配置方式
-
✅ 如何在实际开发中设置和排查这些超时
-
✅ 示例 + 配置说明
🕒 Java 应用中常见的各种“超时”机制详解
一、数据库相关超时
1️⃣ 数据库连接超时(Connection Timeout)
🔍 定义:
指客户端尝试与数据库建立连接的最大等待时间。
⏱ 默认值:
-
MySQL:
connectTimeout=0
(无限等待,生产不建议) -
Oracle:默认
10s
-
PostgreSQL:默认
10s
✅ 设置方式(以 JDBC 为例):
String url = "jdbc:mysql://localhost:3306/mydb?connectTimeout=5000"; // 5秒连接超时
📌 场景举例:
-
数据库宕机;
-
网络延迟高;
-
数据库最大连接数已满;
-
DNS 解析失败;
🧠 常见异常:
java.net.ConnectException: Connection timed out com.mysql.cj.exceptions.ConnectionTimedOutException
2️⃣ 查询超时(Query Timeout)
🔍 定义:
指单条 SQL 语句执行的最大允许时间。超过该时间仍未返回结果,则中断请求。
⏱ 默认值:
-
通常为 0(无限制)
✅ 设置方式:
✅ 方式一:通过 JDBC Statement 设置:
Statement stmt = connection.createStatement(); stmt.setQueryTimeout(10); // 单位:秒 ResultSet rs = stmt.executeQuery("SELECT * FROM large_table");
✅ 方式二:SQL Hint(部分数据库支持):
SET LOCAL statement_timeout = '10s'; SELECT * FROM large_table;
✅ 方式三:JPA/Hibernate 设置:
spring.jpa.properties.hibernate.jdbc.timeout=10
🧠 原理说明:
-
在后台由数据库驱动或数据库本身控制;
-
查询执行线程会在后台继续执行,但前端会抛出异常;
-
需要配合事务管理使用,避免脏数据;
📌 场景举例:
-
<