springboot项目分库
时间: 2023-10-22 11:06:14 浏览: 85
在SpringBoot项目中进行分库操作,可以通过使用多个数据源来实现。首先需要在`application.properties`中配置多个数据源的连接信息,例如:
```
spring.datasource.primary.url=jdbc:mysql://127.0.0.1:3306/db_primary?serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.primary.username=root
spring.datasource.primary.password=123456
spring.datasource.secondary.url=jdbc:mysql://127.0.0.1:3306/db_secondary?serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.secondary.username=root
spring.datasource.secondary.password=123456
```
然后需要在代码中配置这些数据源,并设置事务管理器。例如:
```
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "dataSource")
public DynamicDataSource dynamicDataSource(@Qualifier("primaryDataSource") DataSource primaryDataSource,
@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DataSourceType.PRIMARY, primaryDataSource);
targetDataSources.put(DataSourceType.SECONDARY, secondaryDataSource);
return new DynamicDataSource(primaryDataSource, targetDataSources);
}
@Bean(name="transactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DynamicDataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
```
在上述代码中,我们先通过`@ConfigurationProperties`注解从`application.properties`中读取数据源配置信息,然后构建出两个数据源。接着,我们使用`DynamicDataSource`类将这些数据源封装成动态数据源,并在其中实现了从不同数据源中进行选择的逻辑。最后,我们为这个动态数据源配置了事务管理器。
在使用时,需要在DAO层中指定使用哪个数据源。例如:
```
@Mapper
public interface UserMapper {
@Select("select * from user where id=#{id}")
@DataSource(DataSourceType.PRIMARY)
User selectPrimaryById(@Param("id") Long id);
@Select("select * from user where id=#{id}")
@DataSource(DataSourceType.SECONDARY)
User selectSecondaryById(@Param("id") Long id);
}
```
在上述代码中,我们使用了自定义的`@DataSource`注解来指定使用的数据源。
阅读全文