fix: 优化了动态数据源识别不到oracle问题
This commit is contained in:
parent
2598c10cbb
commit
1de9b506af
@ -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 DUAL,DM/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";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将数据库行映射为实体
|
* 将数据库行映射为实体
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user