单个Spring Boot应用能否配置多个数据库?
答案
单个Spring Boot应用完全支持配置多个数据库,开发者仅依靠Spring Boot原生提供的能力,不需要额外引入重量级第三方框架,就能完成全流程的多数据库配置。
Spring Boot默认的单数据源自动配置,仅在上下文里不存在自定义DataSource Bean的时候触发,只要你手动定义多套数据源实例、做好配置绑定和持久层路由,就能同时连接、操作多个不同的数据库实例,不管是MySQL、PostgreSQL、MongoDB这类不同类型的库,还是同类型的多个分库,都支持。
常规配置步骤
- 先在配置文件(
application.yml/application.properties)中定义多套独立的数据源连接参数,用不同的配置前缀做区分,比如主业务库用spring.datasource.primary前缀,日志存储库用spring.datasource.log前缀,分别写入jdbc连接地址、用户名、密码、驱动类、连接池参数即可。 - 在自定义配置类中创建对应数量的DataSource Bean,给其中一个核心业务数据源加上
@Primary注解标记为默认主数据源,每个Bean通过@ConfigurationProperties注解绑定对应前缀的配置参数,直接用DataSourceBuilder.create().build()就能生成带连接池的数据源实例,不需要手动写连接池初始化逻辑。 - 给持久层框架做数据源路由:如果用MyBatis/MyBatis-Plus,给每个数据源单独创建对应的SqlSessionFactory、Mapper扫描器,指定每个数据源负责扫描的Mapper接口包路径,把对应数据源注入到SqlSessionFactory中即可;如果用Spring Data JPA,就分别为每个数据源创建独立的EntityManager工厂、事务管理器,绑定对应的实体类包路径、Repository扫描路径。
- 如果涉及跨库事务需求,简单场景可以用Spring提供的链式事务管理器做兜底,强一致场景可以集成分布式事务组件适配。
常见踩坑提示
启动时如果报
NoUniqueBeanDefinitionException提示存在多个DataSource类型的Bean,优先检查是不是忘了给主数据源加@Primary注解。Spring Boot 2.x及以上版本默认用Hikari作为连接池,对应连接池的最大连接数、超时时间等参数,直接写在对应数据源的配置前缀下就会自动绑定,不需要额外手动创建HikariDataSource实例。
最简数据源配置代码示例:
@Configuration public class MultiDataSourceConfig { @Primary @Bean @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.log") public DataSource logDataSource() { return DataSourceBuilder.create().build(); } }
内容的提问来源于stack exchange,提问作者Gnana Sekhar
相关产品推荐
相关产品推荐

