news 2026/5/8 17:20:41

后端学习:多数据源配置与使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
后端学习:多数据源配置与使用

公司的项目多数是单数据源,但最近接手了个项目,需要同时操作多个数据库,为此梳理一下Spring Boot多数据源的配置。


一、为什么需要多数据源?

实际开发中,我们经常会遇到这些场景:

  • 主业务库 + 日志库分离
  • 读写分离(主库写,从库读)
  • 跨系统数据同步
    Spring Boot原生支持单数据源,但多数据源需要手动配置。

二、配置步骤详解

Step 1:添加Maven依赖
先在pom.xml引入核心依赖,这里用MySQL示例:

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies>

Step 2:配置application.yml
在配置文件中定义两个数据源,比如primary-db(主库)和secondary-db(从库):

spring: datasource: primary: url: jdbc:mysql://localhost:3306/main_db?useSSL=false username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver secondary: url: jdbc:mysql://localhost:3306/log_db?useSSL=false username: log_user password: log@123 driver-class-name: com.mysql.cj.jdbc.Driver

Step 3:创建数据源配置类
通过@Configuration定义两个独立的DataSource:

@Configuration public class MultiDataSourceConfig { // 主数据源 @Bean @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } // 从数据源 @Bean @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } }

Step 4:指定JPA使用不同数据源
为每个EntityManager指定对应的数据源,避免冲突:

@Configuration @EnableJpaRepositories( basePackages = "com.example.repository.primary", entityManagerFactoryRef = "primaryEntityManager" ) public class PrimaryConfig { @Autowired private DataSource primaryDataSource; @Bean public LocalContainerEntityManagerFactoryBean primaryEntityManager() { LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(primaryDataSource); em.setPackagesToScan("com.example.model.primary"); em.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); return em; } } // 类似地创建SecondaryConfig

Step 5:Service层动态切换数据源
在Service中通过@Qualifier注入对应数据源的操作类:

@Service public class UserService { @Autowired @Qualifier("primaryEntityManager") private EntityManager primaryManager; @Autowired @Qualifier("secondaryEntityManager") private EntityManager secondaryManager; public void saveUser(User user) { primaryManager.persist(user); } public void saveLog(AccessLog log) { secondaryManager.persist(log); } }

三、避坑指南

  1. 事务管理:多数据源需自定义事务管理器,否则事务失效!
  2. 包路径隔离:主/从库的Entity和Repository必须放在不同包下。
  3. 连接池优化:生产环境建议用HikariCP,在配置中加type: com.zaxxer.hikari.HikariDataSource

四、总结

配置多数据源其实就三步:

  1. 定义配置→ 2.隔离数据源→ 3.动态注入
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 17:20:33

经典重映 | 30年过去,我们为何仍在谈论基耶斯洛夫斯基

亚洲艺术电影节AAFF2026年&#xff0c;距离那位用光影探问灵魂、被尊为银幕哲学家的克日什托夫基耶斯洛夫斯基&#xff08;Krzysztof Kieślowski&#xff09;悄然离去&#xff0c;已整整三十载。三十年&#xff0c;足以让一个婴孩步入而立&#xff0c;也足以让一部电影的余温&…

作者头像 李华
网站建设 2026/5/8 17:20:08

会议转行动项处理,AI对比原生工具有何效率差异

我最近被好多学生粉丝问&#xff0c;腾讯会议自带的转写和听脑AI&#xff0c;处理转写、提取行动项到底效率差多少&#xff0c;特意花了一周测了三个大家常用的场景&#xff0c;给你们实打实的结果。这次测的两个工具&#xff0c;一个是上网课开组会天天用的腾讯会议原生转写&a…

作者头像 李华
网站建设 2026/5/8 17:20:00

茉莉花插件完整教程:3大功能让Zotero中文文献管理效率提升90%

茉莉花插件完整教程&#xff1a;3大功能让Zotero中文文献管理效率提升90% 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件&#xff0c;用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 茉莉花(…

作者头像 李华
网站建设 2026/5/8 17:19:49

巴瑞替尼治疗中出现带状疱疹或深静脉血栓时的剂量调整策略

巴瑞替尼作为一种口服选择性JAK1/JAK2抑制剂&#xff0c;在RA治疗中展现出显著疗效。然而&#xff0c;与所有药物一样&#xff0c;巴瑞替尼也可能引发一系列不良反应&#xff0c;包括带状疱疹和深静脉血栓&#xff08;DVT&#xff09;等严重事件。带状疱疹的发生与巴瑞替尼治疗…

作者头像 李华
网站建设 2026/5/8 17:19:44

获客神器|H5促销页工具深度对比,哪家更靠谱?

年费过高拖累获客利润、免费版功能受限无法商用、制作效率低错过营销窗口期、数据追踪缺失难优化投放——这些痛点让中小商家在借助H5促销页获客时屡屡陷入“高投入低回报”的困境。尤其在低成本获客需求下&#xff0c;工具的性价比、功能适配度与操作效率直接决定营销效果。本…

作者头像 李华
网站建设 2026/5/8 17:19:32

注意力机制模块:轻量化冠军——将 MobileViT 的 MCA(移动卷积注意力)嵌入 YOLOv10 颈部

一、问题背景:当 Neck 成为“信息收费站” YOLOv10 作为 Ultralytics 家族中承上启下的关键版本,凭借一致匹配(Consistent Matching)和端到端无 NMS 推理,在精度与速度间找到了精妙的平衡。然而,大量工程实践和前沿研究表明,YOLOv10 的根本瓶颈并不在 Backbone 或 Head…

作者头像 李华