1。导包必须有的!jdbcdependencygroupIdorg。springframework。bootgroupIdspringbootstarterjdbcartifactIddependency!Web依赖dependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependency!MySQL数据库配置dependencygroupIdmysqlgroupIdmysqlconnectorjavaartifactIdscoperuntimescopedependency 2。修改数据源(applocation):2个mysqldb。url127。0。0。1db。usernamedevdb。passworddevmysqldatasource数据库访问配置默认spring。shardingsphere。datasource。saas。urljdbc:mysql:{db。url}:3306solbadgeplatformsaas?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtruenullCatalogMeansCurrenttruespring。shardingsphere。datasource。saas。username{db。username}spring。shardingsphere。datasource。saas。password{db。password}spring。shardingsphere。datasource。saas。driverclassnamecom。mysql。jdbc。Driverspring。shardingsphere。datasource。saas。initialSize10spring。shardingsphere。datasource。saas。minIdle5spring。shardingsphere。datasource。saas。maxActive50配置获取连接等待超时的时间spring。shardingsphere。datasource。saas。maxWait60000配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒spring。shardingsphere。datasource。saas。timeBetweenEvictionRunsMillis60000spring。shardingsphere。datasource。saas。minEvictableIdleTimeMillis60000检测连接是否有效的sqlspring。shardingsphere。datasource。saas。validationQuerySELECT1FROMDUAL检测连接是否有效spring。shardingsphere。datasource。saas。testWhileIdletrue申请连接时执行validationQuery检测连接是否有效spring。shardingsphere。datasource。saas。testOnBorrowfalse归还连接时执行validationQuery检测连接是否有效spring。shardingsphere。datasource。saas。testOnReturnfalsespring。shardingsphere。datasource。saas。filtersstat,wall,log4jspring。shardingsphere。datasource。saas。logSlowSqltruemysqldatasource数据库访问配置spring。shardingsphere。datasource。gps。urljdbc:mysql:{db。url}:3306solbadgegps?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtruenullCatalogMeansCurrenttruespring。shardingsphere。datasource。gps。username{db。username}spring。shardingsphere。datasource。gps。password{db。password}spring。shardingsphere。datasource。gps。driverclassnamecom。mysql。jdbc。Driverspring。shardingsphere。datasource。gps。initialSize10spring。shardingsphere。datasource。gps。minIdle5spring。shardingsphere。datasource。gps。maxActive50配置获取连接等待超时的时间spring。shardingsphere。datasource。gps。maxWait60000配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒spring。shardingsphere。datasource。gps。timeBetweenEvictionRunsMillis60000spring。shardingsphere。datasource。gps。minEvictableIdleTimeMillis60000检测连接是否有效的sqlspring。shardingsphere。datasource。gps。validationQuerySELECT1FROMDUAL检测连接是否有效spring。shardingsphere。datasource。gps。testWhileIdletrue申请连接时执行validationQuery检测连接是否有效spring。shardingsphere。datasource。gps。testOnBorrowfalse归还连接时执行validationQuery检测连接是否有效spring。shardingsphere。datasource。gps。testOnReturnfalsespring。shardingsphere。datasource。gps。filtersstat,wall,log4jspring。shardingsphere。datasource。gps。logSlowSqltrue 3。设置mapper配置文件:两个(主要)packagecom。macro。mall。tiny。demo。importcom。alibaba。druid。pool。DruidDataSimportcom。baomidou。mybatisplus。core。MybatisCimportcom。baomidou。mybatisplus。extension。spring。MybatisSqlSessionFactoryBimportorg。apache。ibatis。session。SqlSessionFimportorg。mybatis。spring。annotation。MapperSimportorg。springframework。beans。factory。annotation。Qimportorg。springframework。beans。factory。annotation。Vimportorg。springframework。boot。context。properties。ConfigurationPimportorg。springframework。context。annotation。Bimportorg。springframework。context。annotation。Cimportorg。springframework。context。annotation。Pimportorg。springframework。core。io。support。PathMatchingResourcePatternRimportorg。springframework。jdbc。datasource。DataSourceTransactionMimportjavax。sql。DataSmapper设置authorYZSConfigurationMapperScan(basePackagesSmartDataSourceConfig。PACKAGE,sqlSessionFactoryRefsmartSqlSessionFactory)publicclassSmartDataSourceConfig{staticfinalStringPACKAGEcom。macro。mall。tiny。demo。dao。staticfinalStringMAPPERLOCATIONclasspath:mappingsaas。Value({spring。shardingsphere。datasource。saas。url})privateSValue({spring。shardingsphere。datasource。saas。username})privateSValue({spring。shardingsphere。datasource。saas。password})privateSValue({spring。shardingsphere。datasource。saas。driverclassname})privateStringdriverCBean(namesmartDataSource)PrimarypublicDataSourcesmartDataSource(){DruidDataSourcedataSourcenewDruidDataSource();dataSource。setDriverClassName(driverClass);dataSource。setUrl(url);dataSource。setUsername(user);dataSource。setPassword(password);returndataS}Bean(namesmartTransactionManager)PrimarypublicDataSourceTransactionManagerpaasTransactionManager(){returnnewDataSourceTransactionManager(smartDataSource());}BeanPrimaryConfigurationProperties(prefixspring。shardingsphere。datasource。druid)publicMybatisConfigurationglobalConfiguration(){returnnewMybatisConfiguration();}Bean(namesmartSqlSessionFactory)PrimarypublicSqlSessionFactorypaasSqlSessionFactory(Qualifier(smartDataSource)DataSourcesmartDataSource,MybatisConfigurationconfig)throwsException{finalSqlSessionFactoryBeansessionFactorynewSqlSessionFactoryBean();finalMybatisSqlSessionFactoryBeansessionFactorynewMybatisSqlSessionFactoryBean();sessionFactory。setDataSource(smartDataSource);TODO:2022312导致多数据源切换失效sessionFactory。setConfiguration(config);sessionFactory。setMapperLocations(newPathMatchingResourcePatternResolver()。getResources(SmartDataSourceConfig。MAPPERLOCATION));returnsessionFactory。getObject();}} 另一份配置文件复制一份即可,不过有些参数需要改变,讲解: Primary代表默认数据库,第二份需要去掉 MapperScanBean代表sql工程,dao层位置等,需要改掉不能和第一份一样吗,具体看你的applocation配置,最好方法名称也改掉。 Value配置的数据库信息,两份不同 4。创建文件:dao、mapper下都要配置两份,必须要和mapper配置文件中位置对应,否则无法生效。 中间碰到了一些问题大部分都可以考百度摆平,当然如果你严格然后我说的操作,那就不会有问题,其中解决时间最长的是在配置文件中有一行代码,因为是复制别人的所有不是很明白为什么那么操作,有知道可以在评论里说下,谢谢。 bug:数据库无法切换查询第二数据库时,debug中数据库值都已拿到,但是仍然查的是默认数据库,原因是在mapper配置文件中赋值了一个MybatisConfiguration,源代码如下:Bean(namesmartSqlSessionFactory)PrimarypublicSqlSessionFactorypaasSqlSessionFactory(Qualifier(smartDataSource)DataSourcesmartDataSource,MybatisConfigurationconfig)throwsException{finalSqlSessionFactoryBeansessionFactorynewSqlSessionFactoryBean();finalMybatisSqlSessionFactoryBeansessionFactorynewMybatisSqlSessionFactoryBean();sessionFactory。setDataSource(smartDataSource);TODO:2022312导致多数据源切换失效sessionFactory。setConfiguration(config);sessionFactory。setMapperLocations(newPathMatchingResourcePatternResolver()。getResources(SmartDataSourceConfig。MAPPERLOCATION));returnsessionFactory。getObject();} 如果对你有用,创作不易请点个赞,谢谢。