Springboot多数据源配置出错导致次数据源jpa save方法失效
首先先大声说一声我是【哔——】
// todo 因为时间比较晚并且代码也不在现在这台笔记本上,所以先大致讲下情况。具体代码之后想起来 再贴吧。
因为客观需求导致某服务需要配置双数据源,然后我就CV编程大法写好了这些数据源的配置类。
然后因为觉得有些地方不够优雅,没有充分使用spring的IoC的特性,就做了一些小改动。
然后配好之后就专心开发了,因为一直也没涉及此数据源的update和insert,所以问题一直没发现。直到过了一两周,需要对次数据源里的数据进行update的时候,写了个service调用jpa的repository的save方法,发现数据库里的数据岿然不动。但是没有任何报错,同时findById方法是正常工作没有问题的。所以当场懵逼。
下班后还是对这个bug念念不忘,因为直觉上觉得这么简单的功能出bug大概率是自己哪里犯蠢了而不是哪里有什么我不知道的配置项。苦思冥想了一下突然想起来既然findById是正常的那么执行select就是正常的,出问题的就是update和insert,仿佛嗅到了transactionManager翻车的味道……
于是翻去次数据源的configuration类,去transactionManager的bean那里打了个断点,debug一跑发现了问题:因为双数据源就会有多个同类型bean被创建,生成事务管理类的时候使用了EntityManagerFactoryBean的类,但是我并没有使用@Qualifier
去指定应该注入哪个数据源的,然后就自动注入了主数据源的,因为我在主数据源的对应bean上面加了@Primary
注解……
确实和我的直觉很符合,就是非常蠢的一个同类型bean多个没有具体指定导致的问题。但是给我带来了很大的困扰,一度怀疑过是不是jpa的什么缓存机制又在作妖。但Google也没Google到什么问题(也能理解,毕竟这么蠢的错误没有任何分享价值orz……)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY