自动化立体仓库 - WMS系统
zhang
2025-09-22 4e5108cf18b4f1aa003563694f2aa4ea81792b00
双数据源;同时解决忽略第二数据源的报错
55 文件已重命名
7个文件已添加
1 文件已复制
10个文件已修改
287 ■■■■■ 已修改文件
.idea/misc.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoAssignAGVTasks.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/CheckDeepScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/ErrorStockScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/NotifyLogScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OverYearLogScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/PlcLogScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkLogScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkMastScheduler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/ds/DataSourceAop.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/ds/DataSourceConfig.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/ds/DataSourceType.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/ds/DynamicDataSource.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/AdjDetlMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/ApiLogMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/ApiMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasCrnErrorMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasCrnOptMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasCrnStatusMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasCrnpMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasDevpMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasErrLogMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasLocStsMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasPlcerrorMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasWhsMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasWrkIotypeMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/BasWrkStatusMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/ConfigMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/DocLogMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/DocTypeMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/HostMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/LicenseInfosMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/LocCheckMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/LocDetlMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/LocMastMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/ManLocDetlMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/MatMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/NodeMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/OperateLogMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/OrderDetlMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/OrderMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/OrderSettleMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/PackMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/PermissionMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/RequestLogMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/ResourceMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/RoleMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/RolePermissionMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/RoleResourceMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/RowLastnoMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/SaasLogMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/StaDescMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/StkPlcmMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/TagMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/TrayCodeMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/UserLoginMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/UserMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/ViewInOutMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/ViewStayTimeMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/ViewStockUseMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/ViewWorkInMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/WaitPakinLogMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/WaitPakinMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/WrkDetlLogMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/WrkDetlMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/WrkLastnoMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/WrkMastLogMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/WrkMastMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ConfigMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
.idea/misc.xml
@@ -14,7 +14,7 @@
      </list>
    </option>
  </component>
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/out" />
  </component>
</project>
src/main/java/com/zy/asrs/task/AutoAssignAGVTasks.java
@@ -30,7 +30,7 @@
 */
@Component
public class AutoAssignAGVTasks {
    private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class);
    private static final Logger log = LoggerFactory.getLogger(AutoAssignAGVTasks.class);
    @Autowired
    private WaitPakinService waitPakinService;
@@ -51,7 +51,7 @@
     * 自动派发入库任务给AGV
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    private synchronized void execute(){
    public synchronized void execute(){
        /**
         * agv状态
         * be_batch
@@ -174,7 +174,7 @@
     * 自动派发补空板任务给AGV
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    private synchronized void autoFillEmptyPallets(){
    public synchronized void autoFillEmptyPallets(){
        /**
         * 该字段是组托入库自动出发补空托盘标记
         * item_num
@@ -220,7 +220,7 @@
     * 自动派发出库任务给agv搬运
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    private synchronized void autoOut(){
    public synchronized void autoOut(){
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 30));
        if (wrkMasts.isEmpty()) {
            return;
@@ -265,7 +265,7 @@
     * 入库任务自动解绑agv站点
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    private synchronized void UnbindTheSite(){
    public synchronized void UnbindTheSite(){
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                .in("io_type",1,53)
                .ge("wrk_sts", 2)
src/main/java/com/zy/asrs/task/CheckDeepScheduler.java
@@ -47,7 +47,7 @@
     * 将两个深库位合并为深浅库位,物料号相同,源库位入库日期早于目标库位对应深库位入库日期,库位状态都为F
     */
    @Scheduled(cron = "0/30 * * * * ?")
    private void execute() throws ParseException {
    public void execute() throws ParseException {
        if (!confirmDeep) return;
        ReturnT<String> result = checkDeepHandler.start();
src/main/java/com/zy/asrs/task/ErrorStockScheduler.java
@@ -20,7 +20,7 @@
    private ErrorStockHandler errorStockHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
    public void execute(){
        ReturnT<String> returnT = errorStockHandler.start();
        if (!returnT.isSuccess()) {
            log.error(returnT.getMsg());
src/main/java/com/zy/asrs/task/NotifyLogScheduler.java
@@ -20,7 +20,7 @@
    private NotifyLogHandler notifyLogHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
    public void execute(){
        ReturnT<String> returnT = notifyLogHandler.start();
        if (!returnT.isSuccess()) {
            log.error(returnT.getMsg());
src/main/java/com/zy/asrs/task/OverYearLogScheduler.java
@@ -20,7 +20,7 @@
    private OverYearLogHandler overYearLogHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
    public void execute(){
        ReturnT<String> returnT = overYearLogHandler.start();
        if (!returnT.isSuccess()) {
            log.error(returnT.getMsg());
src/main/java/com/zy/asrs/task/PlcLogScheduler.java
@@ -20,7 +20,7 @@
    private PlcLogHandler plcLogHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
    public void execute(){
        ReturnT<String> returnT = plcLogHandler.start();
        if (!returnT.isSuccess()) {
            log.error(returnT.getMsg());
src/main/java/com/zy/asrs/task/WorkLogScheduler.java
@@ -24,7 +24,7 @@
    private WrkMastService wrkMastService;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
    public void execute(){
        List<WrkMast> wrkMasts = wrkMastService.selectToBeHistoryData();
        if (wrkMasts.isEmpty()) {
            return;
src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -28,7 +28,7 @@
    private WorkMastHandler workMastHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
    public void execute(){
        List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData();
        if (wrkMasts.isEmpty()) {
            return;
@@ -48,7 +48,7 @@
    //拣料任务处理
    @Scheduled(cron = "0/3 * * * * ? ")
    private void jl(){
    public void jl(){
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                .eq("io_type",103)
                .eq("wrk_sts",14L)
src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java
New file
@@ -0,0 +1,38 @@
package com.zy.common.config.ds;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jdbc.datasource.AbstractDataSource;
import org.springframework.util.Assert;
import javax.sql.DataSource;
import java.util.Map;
public abstract class AbstractRoutingDataSource extends AbstractDataSource implements InitializingBean {
    //多数据源map集合
    private Map<Object, Object> targetDataSources;
    //默认数据源
    private Object defaultTargetDataSource;
    //其实就是targetDataSources,后面的afterPropertiesSet()方法会将targetDataSources赋值给resolvedDataSources
    private Map<Object, DataSource> resolvedDataSources;
    private DataSource resolvedDefaultDataSource;
    public void setTargetDataSources(Map<Object, Object> targetDataSources) {
        this.targetDataSources = targetDataSources;
    }
    protected DataSource determineTargetDataSource() {
        Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");
        Object lookupKey = this.determineCurrentLookupKey();
        DataSource dataSource = (DataSource) this.resolvedDataSources.get(lookupKey);
        if (dataSource == null && ( lookupKey == null)) {
            dataSource = this.resolvedDefaultDataSource;
        }
        if (dataSource == null) {
            throw new IllegalStateException("Cannot determine target DataSource for lookup key [" + lookupKey + "]");
        } else {
            return dataSource;
        }
    }
    protected abstract Object determineCurrentLookupKey();
}
src/main/java/com/zy/common/config/ds/DataSourceAop.java
New file
@@ -0,0 +1,27 @@
package com.zy.common.config.ds;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class DataSourceAop {
    @Before("execution(* com.zy.asrs..*(..))")
    public void setDataSource2test01() {
        //System.err.println("test01业务");
        DataSourceType.setDataBaseType(DataSourceType.DataBaseType.TEST01);
    }
    @Before("execution(* com.zy.system..*(..))")
    public void setDataSource2test012() {
        //System.err.println("test01业务");
        DataSourceType.setDataBaseType(DataSourceType.DataBaseType.TEST01);
    }
    @Before("execution(* com.zy.third..*(..))")
    public void setDataSource2test02() {
        //System.err.println("test02业务");
        DataSourceType.setDataBaseType(DataSourceType.DataBaseType.TEST02);
    }
}
src/main/java/com/zy/common/config/ds/DataSourceConfig.java
New file
@@ -0,0 +1,54 @@
package com.zy.common.config.ds;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Value;
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.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
    @Value("${other.datasource.jdbc-url}")
    private String url;
    @Value("${other.datasource.username}")
    private String username;
    @Value("${other.datasource.password}")
    private String password;
    @Value("${other.datasource.driver-class-name}")
    private String driverClassName;
    // 主数据源
    @Bean(name = "dataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }
    // 次数据源
    @Bean(name = "slaveDataSource")
    public DataSource secondaryDataSource() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl(url);
        config.setUsername(username);
        config.setPassword(password);
        config.setDriverClassName(driverClassName);
        config.setInitializationFailTimeout(0L);
        return new HikariDataSource( config);
//        return DataSourceBuilder.create()
//                .driverClassName(driverClassName)
//                .url(url)
//                .username(username)
//                .password(password)
//                .build();
    }
}
src/main/java/com/zy/common/config/ds/DataSourceType.java
New file
@@ -0,0 +1,32 @@
package com.zy.common.config.ds;
public class DataSourceType {
    public enum DataBaseType {
        TEST01, TEST02
    }
    // 使用ThreadLocal保证线程安全
    private static final ThreadLocal<DataBaseType> TYPE = new ThreadLocal<DataBaseType>();
    // 往当前线程里设置数据源类型
    public static void setDataBaseType(DataBaseType dataBaseType) {
        if (dataBaseType == null) {
            throw new NullPointerException();
        }
        //System.err.println("[将当前数据源改为]:" + dataBaseType);
        TYPE.set(dataBaseType);
    }
    // 获取数据源类型
    public static DataBaseType getDataBaseType() {
        DataBaseType dataBaseType = TYPE.get() == null ? DataBaseType.TEST01 : TYPE.get();
        //System.err.println("[获取当前数据源的类型为]:" + dataBaseType);
        return dataBaseType;
    }
    // 清空数据类型
    public static void clearDataBaseType() {
        TYPE.remove();
    }
}
src/main/java/com/zy/common/config/ds/DynamicDataSource.java
New file
@@ -0,0 +1,11 @@
package com.zy.common.config.ds;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource  extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        DataSourceType.DataBaseType dataBaseType = DataSourceType.getDataBaseType();
        return dataBaseType;
    }
}
src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java
New file
@@ -0,0 +1,40 @@
package com.zy.common.config.ds;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = {"com.zy.asrs.mapper", "com.zy.system.mapper"}, sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {
    @Bean(name = "primarySqlSessionFactory")
    @Primary
    public MybatisSqlSessionFactoryBean primarySqlSessionFactory(@Qualifier("dataSource") DataSource dataSource, PaginationInterceptor paginationInterceptor) throws Exception {
        MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        // 设置MyBatis的Mapper XML文件路径
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/asrs/*.xml"));
        Interceptor[] interceptors = new Interceptor[]{paginationInterceptor};
        sessionFactory.setPlugins(interceptors);
        return sessionFactory;
    }
    @Bean(name = "transactionManager")
    @Primary
    public DataSourceTransactionManager primaryTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}
src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java
New file
@@ -0,0 +1,46 @@
package com.zy.common.config.ds;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.zy.third.mapper", sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryDataSourceConfig {
    @Bean(name = "secondarySqlSessionFactory")
    public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource, PaginationInterceptor paginationInterceptor) throws Exception {
        try {
            MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            // 设置MyBatis的Mapper XML文件路径
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources("classpath:mapper/third/*.xml"));
            Interceptor[] interceptors = new Interceptor[]{paginationInterceptor};
            sessionFactory.setPlugins(interceptors);
            return sessionFactory.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    @Bean(name = "secondaryTransactionManager")
    public DataSourceTransactionManager secondaryTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}
src/main/resources/application.yml
@@ -10,8 +10,8 @@
    enabled: false
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://172.17.3.20:1433;databasename=ycawdasrs
#    url: jdbc:sqlserver://127.0.0.1:1433;databasename=ycawdasrs
    #jdbc-url: jdbc:sqlserver://172.17.3.20:1433;databasename=ycawdasrs
    jdbc-url: jdbc:sqlserver://127.0.0.1:1433;databasename=ycawdasrs
    username: sa
    password: sa@123
  mvc:
@@ -31,10 +31,11 @@
    #    jdbc-url: jdbc:mysql://127.0.0.1:3306/wmsdata
    #    username: root
    #    password: root
    #driver-class-name: com.mysql.cj.jdbc.Driver
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=ycawdasrs
    username: liku
    password: 123456
    jdbc-url: jdbc:sqlserver://127.0.0.2:1433;databasename=hcwcs
    username: sa
    password: sa@123
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml 
src/main/resources/mapper/asrs/AdjDetlMapper.xml
src/main/resources/mapper/asrs/ApiLogMapper.xml
src/main/resources/mapper/asrs/ApiMapper.xml
src/main/resources/mapper/asrs/BasCrnErrorMapper.xml
src/main/resources/mapper/asrs/BasCrnOptMapper.xml
src/main/resources/mapper/asrs/BasCrnStatusMapper.xml
src/main/resources/mapper/asrs/BasCrnpMapper.xml
src/main/resources/mapper/asrs/BasDevpMapper.xml
src/main/resources/mapper/asrs/BasErrLogMapper.xml
src/main/resources/mapper/asrs/BasLocStsMapper.xml
src/main/resources/mapper/asrs/BasPlcerrorMapper.xml
src/main/resources/mapper/asrs/BasWhsMapper.xml
src/main/resources/mapper/asrs/BasWrkIotypeMapper.xml
src/main/resources/mapper/asrs/BasWrkStatusMapper.xml
src/main/resources/mapper/asrs/ConfigMapper.xml
src/main/resources/mapper/asrs/DocLogMapper.xml
src/main/resources/mapper/asrs/DocTypeMapper.xml
src/main/resources/mapper/asrs/HostMapper.xml
src/main/resources/mapper/asrs/LicenseInfosMapper.xml
src/main/resources/mapper/asrs/LocCheckMapper.xml
src/main/resources/mapper/asrs/LocDetlMapper.xml
src/main/resources/mapper/asrs/LocMastMapper.xml
src/main/resources/mapper/asrs/ManLocDetlMapper.xml
src/main/resources/mapper/asrs/MatMapper.xml
src/main/resources/mapper/asrs/NodeMapper.xml
src/main/resources/mapper/asrs/OperateLogMapper.xml
src/main/resources/mapper/asrs/OrderDetlMapper.xml
src/main/resources/mapper/asrs/OrderMapper.xml
src/main/resources/mapper/asrs/OrderSettleMapper.xml
src/main/resources/mapper/asrs/PackMapper.xml
src/main/resources/mapper/asrs/PermissionMapper.xml
src/main/resources/mapper/asrs/RequestLogMapper.xml
src/main/resources/mapper/asrs/ResourceMapper.xml
src/main/resources/mapper/asrs/RoleMapper.xml
src/main/resources/mapper/asrs/RolePermissionMapper.xml
src/main/resources/mapper/asrs/RoleResourceMapper.xml
src/main/resources/mapper/asrs/RowLastnoMapper.xml
src/main/resources/mapper/asrs/SaasLogMapper.xml
src/main/resources/mapper/asrs/StaDescMapper.xml
src/main/resources/mapper/asrs/StkPlcmMapper.xml
src/main/resources/mapper/asrs/TagMapper.xml
src/main/resources/mapper/asrs/TrayCodeMapper.xml
src/main/resources/mapper/asrs/UserLoginMapper.xml
src/main/resources/mapper/asrs/UserMapper.xml
src/main/resources/mapper/asrs/ViewInOutMapper.xml
src/main/resources/mapper/asrs/ViewStayTimeMapper.xml
src/main/resources/mapper/asrs/ViewStockUseMapper.xml
src/main/resources/mapper/asrs/ViewWorkInMapper.xml
src/main/resources/mapper/asrs/WaitPakinLogMapper.xml
src/main/resources/mapper/asrs/WaitPakinMapper.xml
src/main/resources/mapper/asrs/WrkDetlLogMapper.xml
src/main/resources/mapper/asrs/WrkDetlMapper.xml
src/main/resources/mapper/asrs/WrkLastnoMapper.xml
src/main/resources/mapper/asrs/WrkMastLogMapper.xml
src/main/resources/mapper/asrs/WrkMastMapper.xml
src/main/resources/mapper/third/ConfigMapper.xml
copy from src/main/resources/mapper/ConfigMapper.xml copy to src/main/resources/mapper/third/ConfigMapper.xml