mybatis plus dynamic datasource 动态数据源 获取datasource以及 Please check the setting of primary问题总结

错误总结:
(springboot版本:2.3.4)

  1. 引入了dynamic-datasource-spring-boot-starter包,没有写application配置会报该错
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
  1. application配置没有声明 primary默认值会报该错
  2. application声明 primary默认值不正确会报该错

在这里插入图片描述

  1. 某些依赖冲突 网上说druid会有冲突 需要排除启动,类似的可能有其它依赖冲突,要排查的话建议另写一个demo 一 一排除 ,类似的可能会有jar包版本问题
  2. 当前项目packing 为pom 会报该错,因为我的是maven复合工程 另起重构工程时 把其中一个pom复制出来 忘记改了 报错导致思维误导,没想到是打包问题 排查了很久才发现的

获取datasource:
通常我们@DS 声明就可以了,但是当我们使用到第三方组件 需要设置一个datasource 该怎么获取呢?

场景:配置定时器分布锁

/**
 *  定时分布锁配置
 * 此时的  @Ds("db2") 是失效的
 */
@Configuration
@EnableScheduling
public class ScheduledTaskConfig {
    
    
    @Autowired
    private DataSource dataSource;

    @Bean
    public LockProvider lockProvider() {
    
    
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        DataSource db2 = ds.getDataSource("db2");
        return new JdbcTemplateLockProvider(
                JdbcTemplateLockProvider.Configuration.builder()
                        .withJdbcTemplate(new JdbcTemplate(db2))
                        //.withTimeZone(TimeZone.getTimeZone("UTC"))
                        .withTableName("sys_schedule_lock")
                        .build()
        );
    }
}

查看一下源码即可发现 DynamicRoutingDataSource 是继承自 DataSource 的,
多个dataSource保存在 dataSourceMap 中,
自然在DynamicRoutingDataSource类中,提供了dataSource.getDataSource(" ")的方法来获取
所以我们需要手动转型一下
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36268103/article/details/120880420
今日推荐