SpringBoot3+MyBatisPlus实现读写分离
时间: 2024-12-19 07:19:11 浏览: 4
Spring Boot 3.x版本与MyBatisPlus结合实现读写分离通常需要以下几个步骤:
1. **配置数据库连接池**:
使用如Druid、HikariCP等高可用数据库连接池,它们支持配置多个数据源,分别用于读取和写入操作。
```java
@Configuration
public class DataSourceConfig {
@Value("${spring.datasource.master.url}")
private String masterUrl;
@Value("${spring.datasource.slave.urls}")
private String[] slaveUrls;
@Bean(name = "masterDataSource")
public DataSource masterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(masterUrl);
// 其他配置,如用户名密码、初始化大小等
return dataSource;
}
@Bean(name = "slaveDataSourceList")
List<DataSource> slaveDataSources() {
List<DataSource> list = Arrays.stream(slaveUrls)
.map(url -> {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
// 配置其他属性,如监控统计拦截等
return dataSource;
})
.collect(Collectors.toList());
return list;
}
}
```
2. **配置MyBatis Plus分库分表**:
MyBatisPlus提供了`GlobalConfig`全局配置,可以在这里指定读写分离策略,比如读库切换和写库策略。同时,要配置对应的分库分表规则。
```java
@Configuration
@MapperScan("com.example.mapper")
public class GlobalConfig extends BaseGlobalConfiguration {
@Autowired
private DataSource masterDataSource;
@Autowired
private List<DataSource> slaveDataSources;
@Override
protected void globalSettings(GlobalConfigSetting config) {
// 设置读库和写库
config.masterDataSource(masterDataSource).slaveDataSources(slaveDataSources);
// 分库分表规则
config.masterTableRule(new ShardingStrategy("table_name"));
config.writeTableRule(new WriteStrategy("write_table_name", new MasterSlaveRule(slaveDataSources)));
}
}
```
3. **使用分库分表的Repository**:
MyBatisPlus提供了动态SQL的支持,可以在Repository方法上标注`@ReadSqlSource`或`@UpdateSqlSource`注解,来指定针对读库或写库的不同SQL。
```java
public interface UserMapper {
@ReadSqlSource(type = UserEntity.class, resource = "/sql/read-user.sql")
List<UserEntity> selectUsers(@Param("userId") Long userId);
@UpdateSqlSource(type = UserEntity.class, resource = "/sql/update-user.sql")
int updateUser(@Param("user") UserEntity user);
}
```
阅读全文