优化生产环境多数据源报错

This commit is contained in:
geht
2026-06-16 18:41:35 +08:00
parent 97a1543e97
commit e28352f8ea
4 changed files with 26 additions and 2 deletions

View File

@@ -1092,3 +1092,9 @@ jeecgboot-vue3/src/views/xslmes/mesXslEquipDowntimeRecord/MesXslEquipDowntimeRec
jeecgboot-vue3/src/views/xslmes/mesXslEquipDowntimeRecord/MesXslEquipDowntimeRecord.data.ts
jeecgboot-vue3/src/views/xslmes/mesXslEquipDowntimeRecord/MesXslEquipDowntimeRecordList.vue
jeecgboot-vue3/src/views/xslmes/mesXslEquipDowntimeRecord/components/MesXslEquipDowntimeRecordModal.vue
-- author:GHT---date:20260616--for: 【MES上辅机】生产环境 SQL Server 中间库连接池校验 DUAL 报错修复 ---
原因application-prod.yml 全局 druid.validationQuery 为 SELECT 1 FROM DUAL动态创建的 sqlserver_mcs 数据源继承该配置后在 SQL Server 上报「对象名 DUAL 无效」。
修改prod 全局改为 SELECT 1McsDataSourceManager 创建/恢复 SQL Server 数据源时显式设置 validationQuery=SELECT 1。
jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/datasource/McsDataSourceManager.java

View File

@@ -3,6 +3,7 @@ package org.jeecg.modules.xslmes.mcs.datasource;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
import com.baomidou.dynamic.datasource.creator.druid.DruidConfig;
import com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@@ -171,9 +172,22 @@ public class McsDataSourceManager {
property.setUrl(buildJdbcUrl(config));
property.setUsername(config.getDbUsername());
property.setPassword(plainPassword);
applySqlServerDruidConfig(property);
return property;
}
/**
* SQL Server 不支持 Oracle/MySQL 的 DUAL 表,覆盖全局 validationQuery 避免连接池校验失败
*/
private void applySqlServerDruidConfig(DataSourceProperty property) {
DruidConfig druid = property.getDruid();
if (druid == null) {
druid = new DruidConfig();
property.setDruid(druid);
}
druid.setValidationQuery("SELECT 1");
}
private void restoreYmlDataSource(DynamicRoutingDataSource routing) {
if (StringUtils.isBlank(ymlUrl)) {
log.warn("[MCS中间库] yml 中未配置 sqlserver_mcs无法恢复默认数据源");
@@ -186,6 +200,7 @@ public class McsDataSourceManager {
property.setUrl(ymlUrl);
property.setUsername(ymlUsername);
property.setPassword(ymlPassword);
applySqlServerDruidConfig(property);
routing.addDataSource(DS_KEY, dataSourceCreator.createDataSource(property));
} catch (Exception e) {
log.error("[MCS中间库] 恢复 yml 默认数据源失败", e);