mysql主从连接springBoot配置
时间: 2023-10-26 09:05:01 浏览: 59
在Spring Boot中配置MySQL主从连接,需要进行以下步骤:
1. 在pom.xml文件中添加MySQL驱动和Spring Data JPA依赖:
```xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
```
2. 在application.yml文件中配置主从连接信息:
```yaml
spring:
datasource:
master:
url: jdbc:mysql://localhost:3306/masterdb?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: root123
driver-class-name: com.mysql.cj.jdbc.Driver
slave:
url: jdbc:mysql://localhost:3306/slavedb?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: root123
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
connectionTimeout: 30000
minimumIdle: 10
maximumPoolSize: 30
idleTimeout: 600000
poolName: MasterSlaveDataSource
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
show-sql: true
hibernate:
ddl-auto: update
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
```
3. 创建数据源配置类MasterSlaveDataSourceConfig,并注入主从数据源:
```java
@Configuration
public class MasterSlaveDataSourceConfig {
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource masterDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "slaveDataSource")
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource slaveDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "masterSlaveDataSource")
public DataSource masterSlaveDataSource(@Qualifier("masterDataSource") DataSource masterDataSource,
@Qualifier("slaveDataSource") DataSource slaveDataSource) {
Map<String, DataSource> targetDataSources = new HashMap<>();
targetDataSources.put("master", masterDataSource);
targetDataSources.put("slave", slaveDataSource);
RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(targetDataSources);
routingDataSource.setDefaultTargetDataSource(masterDataSource);
return routingDataSource;
}
}
```
4. 创建数据源路由类RoutingDataSource,实现AbstractRoutingDataSource的determineCurrentLookupKey方法:
```java
public class RoutingDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDbType();
}
}
```
5. 创建数据源上下文类DataSourceContextHolder,用于设置当前使用的数据源:
```java
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void setDbType(String dbType) {
contextHolder.set(dbType);
}
public static String getDbType() {
return contextHolder.get();
}
public static void clearDbType() {
contextHolder.remove();
}
}
```
6. 创建数据源切换注解DataSourceSwitch,用于指定使用哪个数据源:
```java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DataSourceSwitch {
String value() default "master";
}
```
7. 在Service层中使用DataSourceSwitch注解切换数据源:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public List<User> getAllUsers() {
DataSourceContextHolder.setDbType("slave");
return userRepository.findAll();
}
@Override
@DataSourceSwitch("master")
public User createUser(User user) {
return userRepository.save(user);
}
}
```
以上就是在Spring Boot中配置MySQL主从连接的具体步骤。需要注意的是,以上代码仅供参考,具体实现需要根据自己的业务需求进行调整。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)