springboot整合mybatis设置多数据源的简单使用

设置数据库信息
1 2 3 4 5 6 7 8 9 10 11 | #主数据源 spring.datasource.primary.url=jdbc:mysql: //127.0.0.1:3306/yourheart?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.primary.username=test001 spring.datasource.primary.password=test001 spring.datasource.primary.driverClassName=com.mysql.jdbc.Driver #副数据源 spring.datasource.second.url=jdbc:mysql: //127.0.0.1:3306/yourheart-test?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.second.username=test002 spring.datasource.second.password=test002 spring.datasource.second.driverClassName=com.mysql.jdbc.Driver |
设置pom依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!--springboot整合mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version> 2.1 . 2 </version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version> 5.1 . 6 </version> </dependency> |
配置主数据源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | package com.java.config; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; 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 javax.sql.DataSource; /** * @author yourheart * @Description * @create 2022-05-02 11:52 */ @Configuration @MapperScan (basePackages = "com.java.mapper.zero" , sqlSessionFactoryRef = "PrimarySqlSessionFactory" ) //basePackages:接口文件的包路径 public class DruidConfiguration { @Value ( "${spring.datasource.primary.driverClassName}" ) private String driverClassName; @Value ( "${spring.datasource.primary.url}" ) private String url; @Value ( "${spring.datasource.primary.username}" ) private String userName; @Value ( "${spring.datasource.primary.password}" ) private String password; @Bean (name = "PrimaryDataSource" ) // 表示这个数据源是默认数据源 @Primary //这个一定要加,如果两个数据源都没有@Primary会报错 public DataSource getPrimaryDateSource() { HikariConfig config = new HikariConfig(); config.setDriverClassName(driverClassName); config.setJdbcUrl(url); config.setUsername(userName); config.setPassword(password); HikariDataSource dataSource = new HikariDataSource(config); return dataSource; } @Bean (name = "PrimarySqlSessionFactory" ) @Primary public SqlSessionFactory primarySqlSessionFactory( @Qualifier ( "PrimaryDataSource" ) DataSource datasource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(datasource); /** * 设置mybatis的xml所在位置 */ bean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources( "classpath*:mapping/zero/*.xml" )); /** * 设置驼峰命名 */ org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setMapUnderscoreToCamelCase( true ); bean.setConfiguration(configuration); return bean.getObject(); } @Bean ( "PrimarySqlSessionTemplate" ) /** * 表示这个数据源是默认数据源 */ @Primary public SqlSessionTemplate primarySqlSessionTemplate( @Qualifier ( "PrimarySqlSessionFactory" ) SqlSessionFactory sessionfactory) { return new SqlSessionTemplate(sessionfactory); } } |
配置从数据库信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | package com.java.config; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; 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.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; /** * @author yourheart * @Description * @create 2022-05-02 21:32 */ @Configuration @MapperScan (basePackages = "com.java.mapper.first" ,sqlSessionFactoryRef = "SecondarySqlSessionFactory" ) public class SecondaryDataSourceConfig { @Value ( "${spring.datasource.second.driverClassName}" ) private String driverClassName; @Value ( "${spring.datasource.second.url}" ) private String url; @Value ( "${spring.datasource.second.username}" ) private String userName; @Value ( "${spring.datasource.second.password}" ) private String password; @Bean (name = "SecondaryDataSource" ) public DataSource getSecondaryDataSource() { HikariConfig config = new HikariConfig(); config.setDriverClassName(driverClassName); config.setJdbcUrl(url); config.setUsername(userName); config.setPassword(password); HikariDataSource dataSource = new HikariDataSource(config); return dataSource; } @Bean (name = "SecondarySqlSessionFactory" ) public SqlSessionFactory secondarySqlSessionFactory( @Qualifier ( "SecondaryDataSource" ) DataSource datasource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(datasource); /** * 设置mybatis的xml所在位置 */ bean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources( "classpath*:mapping/first/*.xml" )); /** * 设置驼峰命名 */ org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setMapUnderscoreToCamelCase( true ); bean.setConfiguration(configuration); return bean.getObject(); } @Bean ( "SecondarySqlSessionTemplate" ) public SqlSessionTemplate secondarySqlSessionTemplate( @Qualifier ( "SecondarySqlSessionFactory" ) SqlSessionFactory sessionfactory) { return new SqlSessionTemplate(sessionfactory); } } |
在DruidConfiguration中的basePackages = "com.java.mapper.zero"
表示的意思是会扫描com.java.mapper.zero目录下所有的文件,所以主数据库mapper文件和从数据库mapper文件,最好配置的是同一目录下的两个不同的文件夹
结果就是不然调用那个mapper下的文件,查询的数据都只会是主数据库的数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!