开发者社区 问答 正文

spring boot配置mybatis : 配置报错 

MybatisConfig类中配置了sqlSessionFactoryBean,    MybatisMapperScannerConfig类中配置了MapperScannConfigure ,注解也加了AutoConfigureAfter(MybatisConfig.class),但是debug的时候还是一直先执行MybatisMapperScannerConfig,求大神指教?

展开
收起
kun坤 2020-06-04 13:18:54 601 分享 版权
阿里云 AI 助理回答

在Spring框架中,@AutoConfigureAfter注解用于指示一个配置类应该在另一个配置类之后进行配置。根据您的描述,您希望MybatisMapperScannerConfigMybatisConfig之后执行,但实际调试过程中发现顺序并非如此。这可能是由以下几个原因导致的:

  1. 依赖关系解析顺序:尽管使用了@AutoConfigureAfter,Spring在初始化Bean时可能由于其他因素(如直接或间接的依赖注入)调整了配置类的加载顺序。确保没有其他配置或组件强制提前加载了MybatisMapperScannerConfig

  2. Spring Boot 版本兼容性:不同版本的Spring Boot对自动配置的处理逻辑可能存在差异,确认当前使用的Spring Boot版本与所使用的@AutoConfigureAfter注解行为相兼容。

  3. 直接引用问题:如果在代码中有直接通过@Import或者其他的配置方式显式引入了MybatisMapperScannerConfig,这可能会绕过@AutoConfigureAfter定义的顺序。

解决方案

  • 检查直接引用:确认没有任何地方直接通过@Import@ComponentScan或其他方式直接引用了MybatisMapperScannerConfig,以避免提前加载。

  • 明确依赖关系:在MybatisMapperScannerConfig类上使用@DependsOn({"sqlSessionFactoryBean"})注解,明确表示该配置依赖于sqlSessionFactoryBean。这样可以确保在扫描Mapper之前,SqlSessionFactory已经完全初始化完毕。

  • 调整配置顺序的手动控制:如果上述方法均不奏效,考虑在MybatisConfig类中手动调用MybatisMapperScannerConfigurer的配置逻辑,确保在SqlSessionFactory创建后立即执行Mapper扫描。

  • 日志分析:利用Spring的详细日志输出,观察配置类加载和Bean初始化的实际顺序,这有助于定位问题所在。

  • 升级或降级Spring Boot版本:如果确定是版本兼容性问题,考虑调整Spring Boot版本至一个更稳定且符合预期行为的版本。

请尝试上述建议并结合您的具体项目情况进行调整,以解决配置执行顺序的问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答