springbootmybatis多数据源
时间: 2023-10-27 17:07:57 浏览: 156
可以通过配置多个数据源来实现在Spring Boot中使用MyBatis多数据源。以下是一种常见的配置方式:
1. 在`application.properties`文件中配置第一个数据源的连接信息:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=username1
spring.datasource.password=password1
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
```
2. 创建一个`DataSource`的Bean来管理第一个数据源:
```java
@Configuration
@MapperScan(basePackages = "com.example.db1.mapper", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class DataSource1Config {
@Primary
@Bean(name = "db1DataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource db1DataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "db1SqlSessionFactory")
public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Primary
@Bean(name = "db1SqlSessionTemplate")
public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
```
3. 在`application.properties`文件中配置第二个数据源的连接信息:
```properties
spring.second-datasource.url=jdbc:mysql://localhost:3306/db2
spring.second-datasource.username=username2
spring.second-datasource.password=password2
spring.second-datasource.driver-class-name=com.mysql.jdbc.Driver
```
4. 创建另一个`DataSource`的Bean来管理第二个数据源:
```java
@Configuration
@MapperScan(basePackages = "com.example.db2.mapper", sqlSessionTemplateRef = "db2SqlSessionTemplate")
public class DataSource2Config {
@Bean(name = "db2DataSource")
@ConfigurationProperties(prefix = "spring.second-datasource")
public DataSource db2DataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "db2SqlSessionFactory")
public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "db2SqlSessionTemplate")
public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
```
这样就配置了两个数据源,分别对应两个不同的数据库。你可以根据自己的需求配置更多的数据源。在使用时,可以在具体的Mapper接口上使用`@Qualifier`注解指定要使用的数据源,例如:
```java
@Mapper
@Qualifier("db1SqlSessionTemplate")
public interface UserMapper1 {
// ...
}
@Mapper
@Qualifier("db2SqlSessionTemplate")
public interface UserMapper2 {
// ...
}
```
这样就可以根据需要选择不同的数据源来执行对应的SQL操作了。
阅读全文