yulichang / mybatis-plus-join

支持连表查询的mybatis-plus,mybatis-plus风格的连表操作提供wrapper.leftJoin(),wrapper.rightJoin()等操作
https://yulichang.github.io/mybatis-plus-join-doc/
Apache License 2.0
971 stars 113 forks source link

druid配置主从源,Mybatis plus join 不在自动启动,需要如何配置? #103

Closed smypai closed 4 months ago

smypai commented 4 months ago

当前使用版本(必填,否则不予处理)

com.baomidou mybatis-plus-boot-starter 3.5.5 com.github.yulichang mybatis-plus-join-boot-starter 1.4.9 mysql mysql-connector-java 8.0.22 com.alibaba druid-spring-boot-starter 1.2.20

@Configuration public class DruidDataSourceConfig {

@Bean
public DruidDataSource routingDataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    return dataSource;
}

@Bean
public DruidDataSource slaveDataSource1() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    return dataSource;
}

@Bean
public DruidDataSource slaveDataSource2() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    return dataSource;
}

@Bean
public AbstractRoutingDataSource routingDataSource(DruidDataSource masterDataSource, DruidDataSource slaveDataSource1) {
    Map<Object, Object> targetDataSources = new HashMap<>();
    targetDataSources.put("master", masterDataSource);
    targetDataSources.put("slave1", slaveDataSource1);
    targetDataSources.put("slave2", slaveDataSource2);

    AbstractRoutingDataSource routingDataSource = new AbstractRoutingDataSource() {
        @Override
        protected Object determineCurrentLookupKey() {
            if (TransactionSynchronizationManager.isActualTransactionActive()) {
                // 如果有活动的事务,使用主数据库
                return "master";
            } else {
                // 否则,使用从数据库
                // 这里只是简单地轮流使用从数据库,您可能需要根据实际情况实现更复杂的负载均衡策略
                return ThreadLocalRandom.current().nextInt(2) == 0 ? "slave1" : "slave2";
            }
        }
    };
    routingDataSource.setTargetDataSources(targetDataSources);
    routingDataSource.setDefaultTargetDataSource(masterDataSource); // default is master
    return routingDataSource;
}

@Autowired
@Qualifier("routingDataSource")
private DataSource dataSource;

@Bean
public SqlSessionFactory sqlSessionFactory(MybatisPlusInterceptor mybatisPlusInterceptor, GlobalConfig globalConfig) throws Exception {
    MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
    sqlSessionFactoryBean.setDataSource(dataSource);
    return sqlSessionFactoryBean.getObject();
}

}

该问题是如何引起的?(确定最新版也有问题再提!!!)

druid配置主从源,Mybatis plus join 不在自动启动,需要如何配置?

重现步骤(如果有就写完整)

报错信息

image

yulichang commented 4 months ago

https://mybatisplusjoin.com/pages/problem.html#invalid-bound-statement-not-found