mysql多数据源切换
时间: 2023-08-29 21:13:27 浏览: 49
MySQL多数据源切换可以使用Spring框架提供的AbstractRoutingDataSource类和ThreadLocal来实现。具体步骤如下:
1. 创建一个实现AbstractRoutingDataSource的类,重写determineCurrentLookupKey()方法,该方法返回一个字符串类型的值,表示当前数据源的标识。
```
public class MultipleDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSourceType();
}
}
```
2. 创建一个存储当前数据源标识的类DataSourceContextHolder,使用ThreadLocal来存储当前线程使用的数据源标识。
```
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void setDataSourceType(String dataSourceType) {
contextHolder.set(dataSourceType);
}
public static String getDataSourceType() {
return contextHolder.get();
}
public static void clearDataSourceType() {
contextHolder.remove();
}
}
```
3. 在Spring配置文件中配置数据源和多数据源切换类,如下所示:
```
<!-- 数据源1 -->
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- 数据源2 -->
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test2"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- 多数据源切换类 -->
<bean id="multipleDataSource" class="com.example.demo.config.MultipleDataSource">
<property name="defaultTargetDataSource" ref="dataSource1"/>
<property name="targetDataSources">
<map>
<entry key="dataSource1" value-ref="dataSource1"/>
<entry key="dataSource2" value-ref="dataSource2"/>
</map>
</property>
</bean>
```
4. 在需要切换数据源的地方调用DataSourceContextHolder.setDataSourceType()方法设置当前线程使用的数据源标识即可。
```
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void addUser(User user) {
DataSourceContextHolder.setDataSourceType("dataSource2");
userMapper.addUser(user);
DataSourceContextHolder.clearDataSourceType();
}
public List<User> getUserList() {
DataSourceContextHolder.setDataSourceType("dataSource1");
List<User> userList = userMapper.getUserList();
DataSourceContextHolder.clearDataSourceType();
return userList;
}
}
```
以上即为MySQL多数据源切换的实现方式。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](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)