优化生产环境多数据源报错
This commit is contained in:
@@ -3,8 +3,10 @@ setlocal
|
|||||||
set REPO=%~dp0
|
set REPO=%~dp0
|
||||||
set WEBDIST=%REPO%web-dist
|
set WEBDIST=%REPO%web-dist
|
||||||
|
|
||||||
echo [1/4] build frontend (pnpm build) ...
|
echo [1/4] build frontend (pnpm install + build) ...
|
||||||
cd /d %REPO%jeecgboot-vue3
|
cd /d %REPO%jeecgboot-vue3
|
||||||
|
call pnpm install
|
||||||
|
if errorlevel 1 ( echo [ERROR] pnpm install failed & pause & exit /b 1 )
|
||||||
call pnpm run build
|
call pnpm run build
|
||||||
if errorlevel 1 ( echo [ERROR] frontend build failed & pause & exit /b 1 )
|
if errorlevel 1 ( echo [ERROR] frontend build failed & pause & exit /b 1 )
|
||||||
if not exist "%REPO%jeecgboot-vue3\dist\index.html" ( echo [ERROR] dist/index.html not found & pause & exit /b 1 )
|
if not exist "%REPO%jeecgboot-vue3\dist\index.html" ( echo [ERROR] dist/index.html not found & pause & exit /b 1 )
|
||||||
|
|||||||
@@ -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/MesXslEquipDowntimeRecord.data.ts
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslEquipDowntimeRecord/MesXslEquipDowntimeRecordList.vue
|
jeecgboot-vue3/src/views/xslmes/mesXslEquipDowntimeRecord/MesXslEquipDowntimeRecordList.vue
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslEquipDowntimeRecord/components/MesXslEquipDowntimeRecordModal.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 1;McsDataSourceManager 创建/恢复 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
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.jeecg.modules.xslmes.mcs.datasource;
|
|||||||
import com.alibaba.druid.pool.DruidDataSource;
|
import com.alibaba.druid.pool.DruidDataSource;
|
||||||
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
|
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
|
||||||
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
||||||
|
import com.baomidou.dynamic.datasource.creator.druid.DruidConfig;
|
||||||
import com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator;
|
import com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
@@ -171,9 +172,22 @@ public class McsDataSourceManager {
|
|||||||
property.setUrl(buildJdbcUrl(config));
|
property.setUrl(buildJdbcUrl(config));
|
||||||
property.setUsername(config.getDbUsername());
|
property.setUsername(config.getDbUsername());
|
||||||
property.setPassword(plainPassword);
|
property.setPassword(plainPassword);
|
||||||
|
applySqlServerDruidConfig(property);
|
||||||
return 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) {
|
private void restoreYmlDataSource(DynamicRoutingDataSource routing) {
|
||||||
if (StringUtils.isBlank(ymlUrl)) {
|
if (StringUtils.isBlank(ymlUrl)) {
|
||||||
log.warn("[MCS中间库] yml 中未配置 sqlserver_mcs,无法恢复默认数据源");
|
log.warn("[MCS中间库] yml 中未配置 sqlserver_mcs,无法恢复默认数据源");
|
||||||
@@ -186,6 +200,7 @@ public class McsDataSourceManager {
|
|||||||
property.setUrl(ymlUrl);
|
property.setUrl(ymlUrl);
|
||||||
property.setUsername(ymlUsername);
|
property.setUsername(ymlUsername);
|
||||||
property.setPassword(ymlPassword);
|
property.setPassword(ymlPassword);
|
||||||
|
applySqlServerDruidConfig(property);
|
||||||
routing.addDataSource(DS_KEY, dataSourceCreator.createDataSource(property));
|
routing.addDataSource(DS_KEY, dataSourceCreator.createDataSource(property));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("[MCS中间库] 恢复 yml 默认数据源失败", e);
|
log.error("[MCS中间库] 恢复 yml 默认数据源失败", e);
|
||||||
|
|||||||
@@ -128,7 +128,8 @@ spring:
|
|||||||
timeBetweenEvictionRunsMillis: 60000
|
timeBetweenEvictionRunsMillis: 60000
|
||||||
# 配置一个连接在池中最小生存的时间,单位是毫秒
|
# 配置一个连接在池中最小生存的时间,单位是毫秒
|
||||||
minEvictableIdleTimeMillis: 300000
|
minEvictableIdleTimeMillis: 300000
|
||||||
validationQuery: SELECT 1 FROM DUAL
|
# SQL Server 中间库不支持 DUAL,使用通用校验语句(MySQL/SQL Server 均兼容)
|
||||||
|
validationQuery: SELECT 1
|
||||||
testWhileIdle: true
|
testWhileIdle: true
|
||||||
testOnBorrow: false
|
testOnBorrow: false
|
||||||
testOnReturn: false
|
testOnReturn: false
|
||||||
|
|||||||
Reference in New Issue
Block a user