Spring Boot多数据源配置终极指南:MyBatis+Druid实战详解
想要掌握Spring Boot多数据源配置吗?这篇文章将为你提供完整的MyBatis与Druid多数据源实战指南,帮助你轻松应对复杂业务场景的数据源管理需求。😊
为什么需要多数据源配置?
在现代企业级应用中,单一数据源往往无法满足业务需求。你可能需要:
- 读写分离提升性能
- 连接不同的数据库系统
- 数据分片和分布式处理
- 多租户架构支持
Spring Boot结合MyBatis和Druid提供了优雅的多数据源解决方案!
项目结构概览
让我们先了解多数据源项目的核心结构:
springboot-mybatis-mutil-datasource/
├── src/main/java/org/spring/springboot/
│ ├── config/ds/
│ │ ├── MasterDataSourceConfig.java
│ │ └── ClusterDataSourceConfig.java
│ ├── dao/master/UserDao.java
│ ├── dao/cluster/CityDao.java
│ ├── service/UserService.java
│ └── controller/UserRestController.java
核心配置详解
主数据源配置
MasterDataSourceConfig.java 是主数据源的核心配置:
@Configuration
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE,
sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
static final String PACKAGE = "org.spring.springboot.dao.master";
static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";
@Bean(name = "masterDataSource")
@Primary
public DataSource masterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
}
从数据源配置
ClusterDataSourceConfig.java 负责集群数据源:
@Configuration
@MapperScan(basePackages = ClusterDataSourceConfig.PACKAGE,
sqlSessionFactoryRef = "clusterSqlSessionFactory")
public class ClusterDataSourceConfig {
static final String PACKAGE = "org.spring.springboot.dao.cluster";
static final String MAPPER_LOCATION = "classpath:mapper/cluster/*.xml";
@Bean(name = "clusterDataSource")
public DataSource clusterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
// 配置参数
return dataSource;
}
}
数据访问层设计
主库DAO接口
UserDao.java 处理用户相关操作:
@Repository
public interface UserDao {
User findByName(@Param("userName") String userName);
int insert(@Param("user") User user);
}
从库DAO接口
CityDao.java 处理城市数据:
@Repository
public interface CityDao {
City findByName(@Param("cityName") String cityName);
List<City> findAllCity();
}
业务服务层实现
UserService.java 封装业务逻辑:
@Service
public class UserService {
@Autowired
private UserDao userDao; // 主库操作
@Autowired
private CityDao cityDao; // 从库操作
public User findUserByName(String userName) {
return userDao.findByName(userName);
}
public List<City> findAllCities() {
return cityDao.findAllCity();
}
}
配置文件设置
application.yml 中配置多数据源参数:
# 主数据源配置
master:
datasource:
url: jdbc:mysql://localhost:3306/master_db
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
# 集群数据源配置
cluster:
datasource:
url: jdbc:mysql://localhost:3306/cluster_db
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
最佳实践建议
- 明确的包隔离:为每个数据源创建独立的dao包
- 使用@Primary注解:标记主数据源避免歧义
- 事务管理:为每个数据源配置独立的事务管理器
- 连接池优化:合理配置Druid连接池参数
- 监控配置:启用Druid监控功能
常见问题解决
Q: 如何避免数据源冲突? A: 使用@Qualifier注解明确指定数据源bean名称
Q: 事务如何管理? A: 为每个数据源配置独立的事务管理器
Q: 性能如何优化? A: 合理设置Druid连接池参数,启用监控功能
总结
通过Spring Boot + MyBatis + Druid的组合,我们可以轻松实现多数据源配置。关键点包括:
- 清晰的包结构设计
- 独立的配置类管理
- 正确的事务配置
- 合理的连接池优化
这个实战项目为你提供了完整的多数据源解决方案模板,可以直接应用到实际项目中!🚀
想要体验完整代码?克隆项目开始学习吧:
git clone https://gitcode.com/gh_mirrors/sp/springboot-learning-example
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



