下面就是关于“springboot + mybatis配置多数据源示例”的完整攻略:
1. 添加依赖
在pom.xml文件中添加以下依赖:
<dependencies>
<!--spring-boot-starter-web是Spring Boot web应用常用依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Spring Boot MyBatis和MySQL的依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
2. 配置数据源
配置文件中添加两个数据源的连接信息,注意在配置时要指定不同的别名。
spring:
datasource:
master:
url: jdbc:mysql://localhost:3306/master
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
slave:
url: jdbc:mysql://localhost:3306/slave
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
3. 配置MyBatis
在需要使用的Mapper中指定注入的数据源,仅该Mapper会使用。
在@MapperScan
注解中指定匹配的Mapper包路径,并在该包下新建master和slave两个文件夹,分别存放指定数据源的Mapper。
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper")
public class MyBatisConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource masterDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource slaveDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryMaster(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory sqlSessionFactorySlave(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "masterSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplateMaster(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "slaveSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplateSlave(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
示例1:Master数据源接口操作
在Master数据源的Mapper中操作数据库。
- 在com.example.demo.mapper.master包下创建UserMapper接口。
@Repository
public interface UserMapper {
@Select("SELECT * FROM users")
List<User> getUsers();
}
- 在Master数据源的Service中注入Mapper,使用master数据源。
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Autowired
@Qualifier("masterSqlSessionTemplate")
private SqlSessionTemplate sqlSessionTemplate;
public List<User> getUsers() {
sqlSessionTemplate.selectList("com.example.demo.mapper.master.UserMapper.getUsers");
return userMapper.getUsers();
}
}
示例2:Slave数据源接口操作
在Slave数据源的Mapper中操作数据库。
- 在com.example.demo.mapper.slave包下创建OrderMapper接口。
public interface OrderMapper {
@Select("SELECT * FROM orders")
List<Order> getOrders();
}
- 在Slave数据源的Service中注入Mapper,使用slave数据源。
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
@Qualifier("slaveSqlSessionTemplate")
private SqlSessionTemplate sqlSessionTemplate;
public List<Order> getOrders() {
sqlSessionTemplate.selectList("com.example.demo.mapper.slave.OrderMapper.getOrders");
return orderMapper.getOrders();
}
}
这样我们就可以实现一个基于Spring Boot和MyBatis的多数据源配置并使用的示例程序了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot + mybatis配置多数据源示例 - Python技术站