fix: 优化了动态数据源识别不到oracle问题

This commit is contained in:
tangwei 2026-09-08 11:52:03 +08:00
parent 2598c10cbb
commit 1de9b506af

View File

@ -200,8 +200,9 @@ public class DynamicDataSourceRegistry {
? conf.getConnTimeout() : 30000L; ? conf.getConnTimeout() : 30000L;
ds.setMaxWait(connTimeout); ds.setMaxWait(connTimeout);
// 通用连接池配置 // 通用连接池配置根据 URL 自动选择正确的 validationQuery
ds.setValidationQuery("SELECT 1"); // Oracle 需要 SELECT 1 FROM DUALDM/MySQL/PostgreSQL SELECT 1 即可
ds.setValidationQuery(resolveValidationQuery(driver, conf.getUrl()));
ds.setValidationQueryTimeout(3); ds.setValidationQueryTimeout(3);
ds.setTestWhileIdle(true); ds.setTestWhileIdle(true);
ds.setTestOnBorrow(false); ds.setTestOnBorrow(false);
@ -254,6 +255,24 @@ public class DynamicDataSourceRegistry {
throw new IllegalArgumentException("无法根据 URL 自动识别驱动类型: " + url); throw new IllegalArgumentException("无法根据 URL 自动识别驱动类型: " + url);
} }
/**
* 根据驱动/URL 自动选择正确的 validationQuery
* <ul>
* <li>Oracle {@code SELECT 1 FROM DUAL}</li>
* <li>DM / MySQL / PostgreSQL / SQLServer {@code SELECT 1}</li>
* </ul>
*/
private String resolveValidationQuery(String driverClassName, String url) {
String lowerDriver = driverClassName != null ? driverClassName.toLowerCase() : "";
String lowerUrl = url != null ? url.toLowerCase() : "";
// Oracle 驱动
if (lowerDriver.contains("oracle") || lowerUrl.contains("jdbc:oracle")) {
return "SELECT 1 FROM DUAL";
}
// 其他数据库DM / MySQL / PostgreSQL / SQLServer 通用
return "SELECT 1";
}
/** /**
* 将数据库行映射为实体 * 将数据库行映射为实体
*/ */