请阐述在 Spring Boot 项目中配置和管理多个数据源的具体做法与关键要点。
考察说明
考查对 Spring Boot 多数据源配置原理及常见实现方案的理解。
回答思路
- 【回答框架 1】多数据源配置的核心是让 Spring 容器管理多个 DataSource 实例,并通过 SqlSessionFactory、EntityManager 或 JdbcTemplate 等组件将不同数据源绑定到不同数据访问层。
- 【回答框架 2】常见实现方案有:使用配置类定义多个 DataSource Bean,并通过 @Primary 标记主数据源;利用 Spring 的 AbstractRoutingDataSource 实现动态路由,根据上下文选择数据源;或借助第三方库如 dynamic-datasource。
- 【回答框架 3】配置时需明确事务管理器(DataSourceTransactionManager)与数据源的绑定关系,确保事务操作使用正确的数据源。同时要注意 MyBatis 或 JPA 的配置需对应各自数据源。
- 【回答框架 4】处理多数据源时,需关注连接池的资源管理与数据源隔离,避免连接泄漏和配置混乱。
- 【关键点 1】通过 @ConfigurationProperties 和 @Bean 分别创建多个 DataSource 实例。
- 【关键点 2】使用 @Primary 指定主数据源,并配置对应的 SqlSessionFactory 或 EntityManagerFactory。
- 【关键点 3】AbstractRoutingDataSource 基于 lookup key 路由到目标数据源。
- 【关键点 4】事务管理器必须与具体数据源绑定,否则事务可能失效。
- 【易错点 1】多个数据源时,若未标记 @Primary,Spring 无法自动注入,导致启动失败。
- 【易错点 2】MyBatis 的 mapper 接口若不指定 SqlSessionTemplate,可能绑定到错误的 SqlSessionFactory。
- 【易错点 3】动态路由时,事务开启后无法再切换数据源,需保持数据源确定。