新增:利元亨现场第三数据源添加

This commit is contained in:
2026-02-03 10:48:31 +08:00
parent a4066e80bf
commit 7d53f6cbee
35 changed files with 208 additions and 34 deletions

View File

@@ -22,7 +22,7 @@ import java.io.IOException;
@Configuration
// 扫描第二个数据源的Mapper包指定专属的sqlSessionFactory
@MapperScan(
basePackages = "com.sdm.outbridge.dao",
basePackages = "com.sdm.outbridge.secondDao",
sqlSessionFactoryRef = "secondSqlSessionFactory"
)
public class SecondMybatisPlusConfig {
@@ -45,7 +45,7 @@ public class SecondMybatisPlusConfig {
MybatisSqlSessionFactoryBean fb = new MybatisSqlSessionFactoryBean();
// 设置第二个数据源的Mapper.xml路径建议独立存放避免冲突
fb.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:outbridgemapper/*.xml"));
.getResources("classpath*:secondDaoMapper/*.xml"));
// 绑定第二个数据源
fb.setDataSource(dataSource);

View File

@@ -0,0 +1,70 @@
package com.sdm.outbridge.config;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
import java.io.IOException;
/**
* 第二个数据源的MyBatis-Plus配置
* 扫描专属的Mapper包使用独立的数据源
*/
@Configuration
// 扫描第二个数据源的Mapper包指定专属的sqlSessionFactory
@MapperScan(
basePackages = "com.sdm.outbridge.thirdDao",
sqlSessionFactoryRef = "thirdSqlSessionFactory"
)
public class ThirdMybatisPlusConfig {
/**
* 初始化第二个数据源
*/
@Bean(name = "thirdDataSource")
@ConfigurationProperties(prefix = "spring.datasource.third") // 对应yml中的third数据源配置
public DataSource thirdDataSource() {
return DataSourceBuilder.create().build();
}
/**
* 第二个数据源的SqlSessionFactory
*/
@Bean(name = "thirdSqlSessionFactory")
public MybatisSqlSessionFactoryBean thirdSqlSessionFactory(
@Qualifier("thirdDataSource") DataSource dataSource) throws IOException {
MybatisSqlSessionFactoryBean fb = new MybatisSqlSessionFactoryBean();
// 设置第二个数据源的Mapper.xml路径建议独立存放避免冲突
fb.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:thirdDaoMapper/*.xml"));
// 绑定第二个数据源
fb.setDataSource(dataSource);
// 开启下划线转驼峰(和原有配置保持一致)
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setMapUnderscoreToCamelCase(true);
fb.setConfiguration(configuration);
// 如需分页插件,可在此添加(和原有配置一致)
// fb.setPlugins(new MybatisPlusInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)));
return fb;
}
/**
* 第二个数据源的SqlSessionTemplate可选MyBatis-Plus可自动适配建议添加
*/
@Bean(name = "thirdSqlSessionTemplate")
public SqlSessionTemplate thirdSqlSessionTemplate(
@Qualifier("thirdSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVMainPlanDM;

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVPdtToDM;

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVProductionLineToDM;

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVProjectBatchToDM;

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVProjectResourcePlanDM;

View File

@@ -1,8 +1,7 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVProjectStationPlanToDM;
import com.sdm.outbridge.entity.LyricVProjectStationToDM;
public interface LyricVProjectStationPlanToDmMapper extends BaseMapper<LyricVProjectStationPlanToDM> {

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVProjectStationToDM;

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVProjectToDM;

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.secondDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVTodoEmulationInfoDM;

View File

@@ -1,7 +1,7 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVMainPlanDMMapper;
import com.sdm.outbridge.secondDao.LyricVMainPlanDMMapper;
import com.sdm.outbridge.entity.LyricVMainPlanDM;
import com.sdm.outbridge.service.lyric.LyricVMainPlanDMService;
import org.springframework.stereotype.Service;

View File

@@ -1,7 +1,7 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVPdtDmMapper;
import com.sdm.outbridge.secondDao.LyricVPdtDmMapper;
import com.sdm.outbridge.entity.LyricVPdtToDM;
import com.sdm.outbridge.service.lyric.LyricVPdtDmService;
import org.springframework.stereotype.Service;

View File

@@ -1,6 +1,6 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVProductionLineToDmMapper;
import com.sdm.outbridge.secondDao.LyricVProductionLineToDmMapper;
import com.sdm.outbridge.entity.LyricVProductionLineToDM;
import com.sdm.outbridge.service.lyric.LyricVProductionLineToDmService;
import org.springframework.stereotype.Service;

View File

@@ -1,6 +1,6 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVProjectBatchToDMMapper;
import com.sdm.outbridge.secondDao.LyricVProjectBatchToDMMapper;
import com.sdm.outbridge.entity.LyricVProjectBatchToDM;
import com.sdm.outbridge.service.lyric.LyricVProjectBatchToDmService;
import org.springframework.stereotype.Service;

View File

@@ -1,7 +1,7 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVProjectResourcePlanDMMapper;
import com.sdm.outbridge.secondDao.LyricVProjectResourcePlanDMMapper;
import com.sdm.outbridge.entity.LyricVProjectResourcePlanDM;
import com.sdm.outbridge.service.lyric.LyricVProjectResourcePlanDMService;
import org.springframework.stereotype.Service;

View File

@@ -1,10 +1,10 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVProjectStationExcepTionToDMMapper;
import com.sdm.outbridge.entity.LyricVProjectStationExcepTionToDM;
import com.sdm.outbridge.mode.SimulationTaskSyncExBo;
import com.sdm.outbridge.service.lyric.LyricVProjectStationExcepTionToDMService;
import com.sdm.outbridge.thirdDao.LyricVProjectStationExcepTionToDMMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@@ -1,7 +1,7 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVProjectStationPlanToDmMapper;
import com.sdm.outbridge.secondDao.LyricVProjectStationPlanToDmMapper;
import com.sdm.outbridge.entity.LyricVProjectStationPlanToDM;
import com.sdm.outbridge.service.lyric.LyricVProjectStationPlanToDmService;
import org.springframework.stereotype.Service;

View File

@@ -1,7 +1,7 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVProjectStationToDmMapper;
import com.sdm.outbridge.secondDao.LyricVProjectStationToDmMapper;
import com.sdm.outbridge.entity.LyricVProjectStationToDM;
import com.sdm.outbridge.service.lyric.LyricVProjectStationToDmService;
import org.springframework.stereotype.Service;

View File

@@ -1,6 +1,6 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVProjectToDmMapper;
import com.sdm.outbridge.secondDao.LyricVProjectToDmMapper;
import com.sdm.outbridge.entity.LyricVProjectToDM;
import com.sdm.outbridge.service.lyric.LyricVProjectToDmService;
import org.springframework.stereotype.Service;

View File

@@ -1,7 +1,7 @@
package com.sdm.outbridge.service.impl.lyric;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.outbridge.dao.LyricVTodoInfoMapper;
import com.sdm.outbridge.secondDao.LyricVTodoInfoMapper;
import com.sdm.outbridge.entity.LyricVTodoEmulationInfoDM;
import com.sdm.outbridge.service.lyric.LyricVTodoInfoService;
import org.springframework.stereotype.Service;

View File

@@ -0,0 +1,12 @@
package com.sdm.outbridge.thirdDao;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
public interface DynamicSqlThirdExecutorMapper {
@Select("${sql}") // 核心:用${sql}直接拼接传入的SQL字符串
List<Map<String, Object>> executeThirdCustomSql(@Param("sql") String sql);
}

View File

@@ -1,4 +1,4 @@
package com.sdm.outbridge.dao;
package com.sdm.outbridge.thirdDao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.outbridge.entity.LyricVProjectStationExcepTionToDM;
@@ -8,7 +8,5 @@ import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface LyricVProjectStationExcepTionToDMMapper extends BaseMapper<LyricVProjectStationExcepTionToDM> {
List<LyricVProjectStationExcepTionToDM> queryExceptionsByProjectAndStation(@Param("list") List<SimulationTaskSyncExBo> list);
}
}

View File

@@ -6,6 +6,12 @@ spring:
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
third:
username: root
password: mysql
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
# 测试开发环境
#appKey : 380ad3deb578424c9ca5178383f732c1

View File

@@ -6,7 +6,12 @@ spring:
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
third:
username: root
password: mysql
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
# 测试开发环境
#appKey : 380ad3deb578424c9ca5178383f732c1
#appSecret : 805c316f35024b8b9566ca67b4991c42

View File

@@ -6,6 +6,12 @@ spring:
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
third:
username: root
password: mysql
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
# 测试开发环境
#appKey : 380ad3deb578424c9ca5178383f732c1

View File

@@ -1,11 +1,17 @@
spring:
datasource:
# todo 生产地址
second:
username: EP_DM
password: ENC(c04rt9Z6Ygz024EU9eWvig==)
# todo 生产地址
jdbc-url: jdbc:mysql://10.122.48.11:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
# todo 第三个数据源生产ip不一样
third:
username: EP_DM
password: ENC(c04rt9Z6Ygz024EU9eWvig==)
jdbc-url: jdbc:mysql://10.122.48.11:13306/ecn?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
# 测试开发环境
#appKey : 380ad3deb578424c9ca5178383f732c1

View File

@@ -6,6 +6,13 @@ spring:
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
third:
username: root
password: mysql
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
# 测试开发环境
#appKey : 380ad3deb578424c9ca5178383f732c1

View File

@@ -6,6 +6,12 @@ spring:
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
third:
username: root
password: mysql
# todo 生产地址
jdbc-url: jdbc:mysql://127.0.0.1:13306/easy_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
# 测试开发环境
#appKey : 380ad3deb578424c9ca5178383f732c1

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sdm.outbridge.dao.LyricVProjectStationExcepTionToDMMapper">
<mapper namespace="com.sdm.outbridge.thirdDao.LyricVProjectStationExcepTionToDMMapper">
<select id="queryExceptionsByProjectAndStation"
resultType="com.sdm.outbridge.entity.LyricVProjectStationExcepTionToDM">

View File

@@ -7,6 +7,7 @@ import com.sdm.outbridge.mode.GetProcessDataReq;
import com.sdm.outbridge.mode.HkUploadFileReq;
import com.sdm.outbridge.service.lyric.*;
import com.sdm.pbs.service.lyricDbMock.DynamicSqlExecutor;
import com.sdm.pbs.service.lyricDbMock.DynamicSqlThirdExecutor;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
@@ -50,7 +51,8 @@ public class TestSecondDbController {
@Autowired
private DynamicSqlExecutor dynamicSqlExecutor;
@Autowired
private DynamicSqlThirdExecutor dynamicSqlThirdExecutor;
@@ -234,8 +236,8 @@ public class TestSecondDbController {
* 执行查询SQL接口
* @return SQL执行结果
*/
@PostMapping("/mockSql")
public SdmResponse<List<Map<String, Object>>> executeSql(@RequestBody Map paramMap) {
@PostMapping("/mockSecondSql")
public SdmResponse<List<Map<String, Object>>> mockSecondSql(@RequestBody Map paramMap) {
try {
String sql = paramMap.get("sql").toString().trim();
// 安全校验禁止执行危险SQL生产环境必须加
@@ -247,6 +249,20 @@ public class TestSecondDbController {
}
}
@PostMapping("/mockThirdSql")
public SdmResponse<List<Map<String, Object>>> mockThirdSql(@RequestBody Map paramMap) {
try {
String sql = paramMap.get("sql").toString().trim();
// 安全校验禁止执行危险SQL生产环境必须加
validateSql(sql);
List<Map<String, Object>> result = dynamicSqlThirdExecutor.executeQuery(sql);
return SdmResponse.success( result);
} catch (Exception e) {
return SdmResponse.failed("执行失败: " + e.getMessage());
}
}
/**
* SQL安全校验生产环境必须实现

View File

@@ -1,6 +1,6 @@
package com.sdm.pbs.service.lyricDbMock;
import com.sdm.outbridge.dao.DynamicSqlExecutorMapper;
import com.sdm.outbridge.secondDao.DynamicSqlExecutorMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -0,0 +1,41 @@
package com.sdm.pbs.service.lyricDbMock;
import com.sdm.outbridge.thirdDao.DynamicSqlThirdExecutorMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* 动态SQL执行工具类适配多数据源
*/
@Component
@Slf4j
public class DynamicSqlThirdExecutor {
// 注入纯注解版Mapper接口多数据源需加@Qualifier指定
@Autowired
private DynamicSqlThirdExecutorMapper dynamicSqlThirdExecutorMapper;
/**
* 执行查询SQL返回List<Map>(通用格式)
* 关键修复2直接使用SqlSessionTemplate的selectList方法无需获取原生SqlSession
*/
public List<Map<String, Object>> executeQuery(String sql) {
try {
long start = System.currentTimeMillis();
// MyBatis执行动态SQL的通用方式使用STATEMENT类型执行原生SQL
List<Map<String, Object>> maps = dynamicSqlThirdExecutorMapper.executeThirdCustomSql(sql);
long end = System.currentTimeMillis();
log.info("mockThirdSql:{},本次查询返回:{}条,耗时:{} s",sql,maps.size(),(end - start)/1000);
return maps;
} catch (Exception e) {
log.error("执行动态SQL失败{}", e.getMessage());
e.printStackTrace();
throw new RuntimeException("执行SQL出错: " + e.getMessage(), e);
}
}
}

View File

@@ -158,6 +158,8 @@ security:
- /getProductLine
- /getProjectBatch
- /getProjectInfo
- /mockSecondSql
- /mockThirdSql
# xxljob 配置开始
xxl: