当前位置: 首页 > news >正文

【沉浸式解决问题】微服务子模块引入公共模块的依赖后无法bean未注入

目录

  • 一、问题描述
  • 二、场景还原
  • 三、原因分析
  • 四、解决方案
  • 五、拓展知识
  • 参考文献

一、问题描述

在微服务项目中的公共模块进行了Mybatis Plus配置,创建了配置类并添加了@Configuration注解,其他模块引入该模块后不生效
我这里是在Mybatis Plus公共模块中注入了自定义SQL方法,测试模块获取失败

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

在这里插入图片描述


二、场景还原

前情提要:【抽丝剥茧知识讲解】【沉浸式解决问题】自定义MyBatis-Plus 3.5.12中的BaseMapper,并实现真正的批量插入
在文章的最后单独创建了一个模块配置Mybatis-plus,在一个模块内测试没问题,在其他模块测试时就获取不到了


三、原因分析

spring boot启动需要一个启动类,上面有@SpringBootApplication注解,但是该启动类启动时只扫描自己目录下的各种bean,引入的依赖中的正常是不自动装载的


四、解决方案

给公共模块中的bean设置成自动配置就好了

在公共模块的resources目录下创建固定目录
在这里插入图片描述

输入目录名META-INF后回车

META-INF

在这里插入图片描述
继续在META-INF目录下创建spring,要分开创建

spring

在这里插入图片描述
再创建文件
在这里插入图片描述

输入文件名org.springframework.boot.autoconfigure.AutoConfiguration.imports后回车

org.springframework.boot.autoconfigure.AutoConfiguration.imports

在这里插入图片描述
右键配置类复制类路径
在这里插入图片描述
粘贴到org.springframework.boot.autoconfigure.AutoConfiguration.imports中,如果有其他的需要自动配置的bean粘贴在下面即可
在这里插入图片描述
再次运行就注入成功了

@SpringBootTest
public class UserTest {@AutowiredUserMapper userMapper;@AutowiredIUserService userService;void truncate() {userMapper.truncateTable(); // 每次测试前情况表}List<User> userList() {List<User> userList = new ArrayList<>();for (int i = 0; i < 300000; i++) {User user = new User();user.setName("姓名"+i);userList.add(user);}return userList;}@Testvoid test3() {truncate();StopWatch stopWatch = new StopWatch();stopWatch.start();userService.saveBatch(userList());stopWatch.stop();System.out.println(stopWatch.getTotalTimeMillis());}

在这里插入图片描述

五、拓展知识

SpringBoot提供了SPI扩展的方式引入其他依赖中的Bean,即自动装配,SpringBoot2.7以前可以通过配置META-INF/spring.factories文件,
SpringBoot2.7以后可以通过配置META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,不过SpringBoot2.7以后为了兼容以前的版本习惯,依然可以配置META-INF/spring.factories

参考文献

SpringBoot自动配置原理:@EnableAutoConfiguration解析


喜欢的点个关注吧><!祝你永无bug!

/*_ooOoo_o8888888o88" . "88(| -_- |)O\  =  /O____/`---'\____.'  \\|     |//  `./  \\|||  :  |||//  \/  _||||| -:- |||||-  \|   | \\\  -  /// |   || \_|  ''\---/''  |   |\  .-\__  `-`  ___/-. /___`. .'  /--.--\  `. . __."" '<  `.___\_<|>_/___.'  >'"".| | :  `- \`.;`\ _ /`;.`/ - ` : | |\  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^佛祖保佑       永无BUG
*/
http://www.lqws.cn/news/512803.html

相关文章:

  • 磁悬浮轴承温度漂移克星:三招实现精准控制
  • 桌面小屏幕实战课程:DesktopScreen 9 GPIO
  • 轻巧灵动,智启未来 ——Kinova Gen3 Lite 机器人轻松解锁各行业自动化新姿势
  • 集成学习基础:Bagging 原理与应用
  • 多模态大模型(从0到1)
  • CRMEB PHP多门店版v3.2.1系统全开源+Uniapp前端+搭建教程
  • 【stm32】标准库学习——USART串口
  • 2023年全国青少年信息素养大赛Python 复赛真题——玩石头游戏
  • 大模型时代的创业机遇
  • 左神算法之双集合平均值优化操作的最大次数
  • SIAM-2011《Weighted Graph Compression for Parameter-free Clustering With PaCCo》
  • 【基础篇-消息队列】—— 如何实现单个队列的并行消费及如何保证消息的严格顺序
  • 爬取小红书相关数据导入到excel
  • SpringCloud系列(35)--使用HystrixDashboard进行服务监控
  • 《汇编语言:基于X86处理器》第4章 数据传送、寻址和算术运算(2)
  • 行为验证码 AJ-Captcha 使用文档
  • Golang Kratos 系列:领域层model定义是自洽还是直接依赖第三方(三)
  • C++字符串的行输入
  • MySQL之SQL性能优化策略
  • 《仿盒马》app开发技术分享-- 兑换列表展示(68)
  • git操作练习(3)
  • 【Python-Day 29】万物皆对象:详解 Python 类的定义、实例化与 `__init__` 方法
  • SQL Server从入门到项目实践(超值版)读书笔记 18
  • git commit --no-verify -m ““ 命令的作用是什么
  • LangChain网页自动化PlayWrightBrowserToolkit
  • Python训练营-Day40-训练和测试的规范写法
  • maven:迁移到 Maven Central 后 pom.xml的配置步骤
  • 马克思主义基本原理期末复习下
  • HarmonyOS开发基础 --鸿蒙仓颉语言基础语法入门
  • 基于元学习的回归预测模型如何设计?