springboot mybatis-plus 和 dynamic-datasource-spring 和mysql
时间: 2024-01-17 13:05:11 浏览: 25
Spring Boot是一个基于Spring框架的快速开发框架,Mybatis-Plus是一个基于Mybatis的增强工具,提供了许多便捷的操作和简化了开发流程。Dynamic-datasource-spring是一个动态数据源框架,可以根据需要选择数据源。
MySQL是一种开源的关系型数据库管理系统,支持多种操作系统。
使用Spring Boot和Mybatis-Plus可以快速开发出高效的Java应用程序,而使用Dynamic-datasource-spring可以轻松地管理多个数据源,使得应用程序更加灵活。同时,MySQL作为一种成熟的数据库管理系统,具有广泛的应用场景和丰富的功能,可以满足大多数业务需求。
相关问题
获取mybatis-plus-dynamic-datasource中的多数据源实例
在 mybatis-plus-dynamic-datasource 中获取多数据源实例的方法如下:
1. 导入相关依赖:
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.3</version>
</dependency>
```
2. 在 application.yml 或 application.properties 中配置数据源信息,例如:
```yaml
spring:
datasource:
dynamic:
primary: ds1 # 设置默认数据源
datasource:
ds1:
url: jdbc:mysql://localhost:3306/db1
username: root
password: 123456
ds2:
url: jdbc:mysql://localhost:3306/db2
username: root
password: 123456
```
3. 创建一个继承自 AbstractRoutingDataSource 的类,用于动态切换数据源:
```java
public class DynamicRoutingDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DynamicDataSourceContextHolder.getDataSourceKey();
}
}
```
4. 创建一个数据源上下文持有者类,用于设置和获取当前线程使用的数据源:
```java
public class DynamicDataSourceContextHolder {
private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
public static void setDataSourceKey(String dataSourceKey) {
CONTEXT_HOLDER.set(dataSourceKey);
}
public static String getDataSourceKey() {
return CONTEXT_HOLDER.get();
}
public static void clearDataSourceKey() {
CONTEXT_HOLDER.remove();
}
}
```
5. 配置数据源切换策略和数据源 bean:
```java
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.dynamic")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
@Bean
public DataSource dataSource(DataSourceProperties properties) {
Map<String, DataSource> dataSourceMap = new HashMap<>();
dataSourceMap.put("ds1", properties.getDataSource("ds1"));
dataSourceMap.put("ds2", properties.getDataSource("ds2"));
// 设置默认数据源
DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource();
dataSource.setDefaultTargetDataSource(dataSourceMap.get(properties.getPrimary()));
dataSource.setTargetDataSources(dataSourceMap);
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
return sessionFactoryBean.getObject();
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
```
现在,你可以通过注入 DataSource 类型的 bean 来获取多数据源实例,例如:
```java
@Autowired
private DataSource dataSource;
```
然后,你就可以使用这个数据源实例来执行数据库操作了。
mybatis-plus配置文件yml
如何配置多数据源?
可以在yml配置文件中使用spring.datasource.dynamic数据源配置多个数据源,示例如下:
spring:
datasource:
dynamic:
datasource:
master:
url: jdbc:mysql://localhost:3306/master
username: root
password: root
slave1:
url: jdbc:mysql://localhost:3307/slave1
username: root
password: root
slave2:
url: jdbc:mysql://localhost:3308/slave2
username: root
password: root
在代码中使用@DS注解来指定哪个数据源,示例如下:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@DS("master")
public List<User> findAll() {
return userMapper.findAll();
}
@DS("slave1")
public User findById(long id) {
return userMapper.findById(id);
}
@DS("slave2")
public int update(User user) {
return userMapper.update(user);
}
}