以上示例中,我们配置了两个数据源:primary和secondary。 在mybatis-plus配置中,我们手动指定了默认数据源为primary。这样,当我们使用mybatis-plus进行数据库操作时,默认会使用primary这个数据源。 当然,如果需要使用secondary数据源,也可以手动指定。例如:
时间: 2023-12-29 15:03:34 浏览: 113
```
@Autowired
@Qualifier("secondaryDataSource")
private DataSource secondaryDataSource;
public void useSecondaryDataSource() {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(secondaryDataSource);
SqlSession sqlSession = sqlSessionFactory.openSession();
// 使用secondary数据源进行数据库操作...
}
```
在以上示例中,我们通过@Autowired和@Qualifier注解,注入了我们配置的secondary数据源。然后,我们可以使用SqlSessionFactoryBuilder构建一个SqlSessionFactory,然后使用这个SqlSessionFactory获取一个SqlSession,从而使用secondary数据源进行数据库操作。
相关问题
在application.yml文件中配置多个数据源默认使用第一个完整培训
好的,下面是在application.yml文件中配置多个数据源,默认使用第一个数据源的示例:
```yaml
spring:
datasource:
# 第一个数据源配置
primary:
url: jdbc:mysql://localhost:3306/primary_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
username: primary_user
password: primary_password
driver-class-name: com.mysql.cj.jdbc.Driver
# 第二个数据源配置
secondary:
url: jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
username: secondary_user
password: secondary_password
driver-class-name: com.mysql.cj.jdbc.Driver
# 配置多数据源时,需要手动指定默认数据源为primary
mybatis-plus:
configuration:
# 指定默认数据源为primary
default-enum-type-handler: com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler
default-scripting-language-type: org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
map-underscore-to-camel-case: true
mapper-locations: classpath*:mapper/**/*.xml
global-config:
db-config:
logic-delete-value: -1
logic-not-delete-value: 1
id-type: auto
field-strategy: not_empty
```
以上示例中,我们配置了两个数据源:primary和secondary。
在mybatis-plus配置中,我们手动指定了默认数据源为primary。这样,当我们使用mybatis-plus进行数据库操作时,默认会使用primary这个数据源。
当然,如果需要使用secondary数据源,也可以手动指定。例如:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
@Qualifier("secondaryDataSource")
private DataSource dataSource;
@Autowired
private UserMapper userMapper;
@Override
public List<User> listUsers() {
// 指定使用secondary数据源
DynamicDataSourceContextHolder.setDataSourceKey("secondary");
List<User> userList = userMapper.selectList(null);
// 切换回默认数据源
DynamicDataSourceContextHolder.clearDataSourceKey();
return userList;
}
}
```
以上示例中,我们首先注入了名为secondaryDataSource的数据源。然后,在需要使用secondary数据源的方法中,手动指定使用secondary数据源。最后,记得切换回默认数据源。
mybatis springboot3 多数据源切换
### 实现Spring Boot 3中MyBatis多数据源切换
在Spring Boot 3环境中配置多个数据源并与MyBatis集成是一个常见的需求,尤其是在处理不同数据库实例或不同类型的数据存储时。以下是详细的实现方法:
#### 配置文件设置
为了支持多数据源,`application.properties` 或 `application.yml` 文件中的配置需要针对每个数据源分别定义连接属性。
对于MySQL和Redis组合的情况可以参考如下配置[^1]:
```yaml
spring:
datasource:
primary:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.198.201:3308/primary_db?serverTimezone=Asia/Shanghai
username: root
password: qingfengzilai.
secondary:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/secondary_db
username: user
password: pass
redis:
host: 192.168.198.201
port: 6379
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
```
注意这里增加了第二个数据源(假设为PostgreSQL),并且通过前缀区分不同的数据源名称。
#### Java配置类编写
接着创建Java配置类来注册这些数据源以及对应的SqlSessionFactoryBean对象。
```java
@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();
}
// ...其他必要的bean定义...
}
```
上述代码片段展示了如何声明两个名为`primaryDataSource` 和 `secondaryDataSource` 的数据源 bean,并指定了各自的前缀用于读取相应的配置项。
#### 动态数据源路由逻辑
为了让应用程序能够在运行期间动态选择合适的数据源执行查询操作,则需引入自定义的抽象层——即所谓的“动态数据源”。
```java
import javax.sql.DataSource;
import java.util.Map;
@Component
@Aspect
public class DynamicDataSource extends AbstractRoutingDataSource {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
@Override
protected Object determineCurrentLookupKey() {
String dataSourceName = getDataSource();
if (dataSourceName == null || "".equals(dataSourceName.trim())) {
return "primary";
} else {
return dataSourceName;
}
}
public void setDataSource(String dataSourceName){
contextHolder.set(dataSourceName);
}
public String getDataSource(){
return contextHolder.get();
}
public void clearDataSource(){
contextHolder.remove();
}
}
@Bean(name = "dynamicDataSource")
public DataSource dynamicDataSource(@Qualifier("primaryDataSource") DataSource primaryDataSource,
@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put("primary", primaryDataSource);
targetDataSources.put("secondary", secondaryDataSource);
DynamicDataSource dynamicDataSource = new DynamicDataSource();
dynamicDataSource.setDefaultTargetDataSource(primaryDataSource);
dynamicDataSource.setTargetDataSources(targetDataSources);
return dynamicDataSource;
}
```
这段代码实现了基于AOP切面编程模式下的动态数据源管理器,它允许开发者根据业务场景灵活指定要使用的具体数据源。
#### 使用示例
当想要访问特定的数据源时,可以通过调用`DynamicDataSource`的方法来进行切换:
```java
@Autowired
private DynamicDataSource dynamicDataSource;
// 切换至主库
dynamicDataSource.setDataSource("primary");
try{
// 执行一些SQL语句...
} finally {
// 清除上下文中保存的目标数据源名
dynamicDataSource.clearDataSource();
}
```
以上就是关于在Spring Boot 3环境下利用MyBatis实现多数据源切换的主要步骤和技术要点。
阅读全文