Spring Boot+Mybatis 实现主从数据源分离详细教程

5 下载量 174 浏览量 更新于2024-09-01 收藏 74KB PDF 举报
"这篇文章主要展示了如何在Spring Boot项目中集成Mybatis来实现主从数据库(多数据源)的分离。文中会涉及到SpringBoot、MyBatis、分页插件PageHelper、通用Mapper以及数据库连接池Druid的配置与使用。" 在Spring Boot应用中集成Mybatis实现主从数据源分离,主要是为了提高系统的读写性能,将读操作分配到从库,写操作处理在主库,从而减轻主库的压力。以下是一些关键步骤和配置: 1. 项目结构与依赖:首先创建一个Maven项目,并按照文章所示构建项目结构。在`pom.xml`文件中,你需要引入必要的依赖,如Spring Boot的JDBC启动器、MySQL驱动、Jackson库(用于JSON处理)以及Mybatis的相关依赖。 ```xml <!-- Spring Boot JDBC starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- MySQL driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- MyBatis dependencies --> <!-- ... --> ``` 2. 配置数据源:在`application.properties`或`application.yml`中,配置两个不同的数据源,分别为主库和从库。例如: ```properties # 主库配置 spring.datasource.primary.url=jdbc:mysql://master_host:port/master_db?useUnicode=true&characterEncoding=utf8 spring.datasource.primary.username=root spring.datasource.primary.password=root spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver # 从库配置 spring.datasource.secondary.url=jdbc:mysql://slave_host:port/slave_db?useUnicode=true&characterEncoding=utf8 spring.datasource.secondary.username=root spring.datasource.secondary.password=root spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver ``` 3. 配置数据源切换:创建一个`DataSourceConfig`类,通过`@ConfigurationProperties`注解加载配置文件中的数据源信息,并利用`@Primary`标记主库数据源。同时,可以使用`@Bean`注解创建从库的数据源。 ```java @Configuration @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceConfig { @Primary private DataSource primary; private DataSource secondary; // getters and setters } @Bean(name = "secondaryDataSource") public DataSource secondaryDataSource(DataSourceConfig config) { return config.getSecondary(); } ``` 4. 配置Mybatis:创建`MybatisConfig`类,配置SqlSessionFactory,使用`@Profile`注解区分主从数据源。还需要定义MapperScannerConfigurer扫描Mapper接口。 ```java @Configuration @Profile("primary") public class PrimaryMybatisConfig { @Autowired private DataSource primaryDataSource; @Bean public SqlSessionFactory sqlSessionFactory() { // 创建SqlSessionFactory配置 } @Bean public MapperScannerConfigurer primaryMapperScannerConfigurer() { // 配置Mapper扫描器 } } @Configuration @Profile("secondary") public class SecondaryMybatisConfig { @Autowired private DataSource secondaryDataSource; @Bean public SqlSessionFactory secondarySqlSessionFactory() { // 创建SqlSessionFactory配置 } @Bean public MapperScannerConfigurer secondaryMapperScannerConfigurer() { // 配置Mapper扫描器 } } ``` 5. 使用`@Profile`切换数据源:在需要指定数据源的Service或Repository中,使用`@Profile`注解来选择使用哪个数据源。 ```java @Service @Profile("primary") public class PrimaryDataService { // 主库相关操作 } @Service @Profile("secondary") public class SecondaryDataService { // 从库相关操作 } ``` 6. 在运行时选择数据源:在Spring Boot应用启动时,通过命令行参数`--spring.profiles.active`指定当前环境,从而决定使用哪个数据源。 7. 分页插件PageHelper与通用Mapper:如果项目中使用了PageHelper,记得在Mybatis配置中加入PageHelper的配置,以实现便捷的分页功能。通用Mapper可以帮助简化SQL映射,减少Mapper接口和XML文件的编写工作量。 8. Druid连接池:Druid是常用的数据库连接池,提供了监控、拦截器等功能。在项目中引入Druid后,需要配置相应的DruidDataSource,并可以自定义监控页面。 通过以上步骤,你可以在Spring Boot应用中成功实现主从数据源的分离。在实际开发中,根据项目需求,可能还需要进行事务管理、异常处理等方面的配置和优化。记住,主从数据源的切换应在业务层面上进行,确保正确地路由读写操作到对应的数据源。