fix: 优化了动态数据源识别不到oracle问题
This commit is contained in:
parent
2598c10cbb
commit
1de9b506af
@ -200,8 +200,9 @@ public class DynamicDataSourceRegistry {
|
||||
? conf.getConnTimeout() : 30000L;
|
||||
ds.setMaxWait(connTimeout);
|
||||
|
||||
// 通用连接池配置
|
||||
ds.setValidationQuery("SELECT 1");
|
||||
// 通用连接池配置:根据 URL 自动选择正确的 validationQuery
|
||||
// Oracle 需要 SELECT 1 FROM DUAL,DM/MySQL/PostgreSQL 用 SELECT 1 即可
|
||||
ds.setValidationQuery(resolveValidationQuery(driver, conf.getUrl()));
|
||||
ds.setValidationQueryTimeout(3);
|
||||
ds.setTestWhileIdle(true);
|
||||
ds.setTestOnBorrow(false);
|
||||
@ -254,6 +255,24 @@ public class DynamicDataSourceRegistry {
|
||||
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