@ComponentScan注解引发外部请求无法处理的解决办法

@ComponentScan注解引发外部请求无法处理的解决办法

问题起因

最近通过maven从项目中拆分出模块module-db和模块module-seckill

模块module-db主要通过mybatisplus实现数据库的操作,并封装业务接口;

模块module-seckill引入module-db依赖,使用相关操作

问题1在module-seckill中无法访问到module-db模块中的接口

原因:原因是module-seckill没有扫描和注册到module-db中业务的bean

解决办法:在module-seckill主应用类上添加注解:

@MapperScan(value = "cn.jet.moduledb.dao")

@ComponentScan(value = "cn.jet. moduledb.service")

问题解决,但是又引来了问题2

问题2发现对可执行模块module-seckill中所有请求都失败了(除了/actuator/info)

原因:忙活半天,突然顿悟,可能是@ComponentScan造成的。

解决办法:@ComponentScan注解中添加上控制器所在的包

@ComponentScan(basePackages = {"cn.jet.moduledb.service","cn.jet.moduleseckill.controller"})

解决了

关于@ComponentScan注解

@ComponentScan用于自动扫描并注册 Spring 应用上下文中的 Bean。指示 Spring 框架在哪些包中查找用其他注解(如 @Component、@Service、@Repository 和 @Controller 等)标记的组件。

主要用途

自动检测组件:@ComponentScan 可以自动扫描指定包及其子包中的类,并将用 @Component、@Service、@Repository 和 @Controller 等注解标记的类注册为 Spring 应用上下文中的 Bean。

配置类路径:通过 basePackages 或 basePackageClasses 属性,可以指定要扫描的包路径。如果不指定,Spring 将默认扫描配置类所在的包及其子包。

排除特定组件:可以使用 excludeFilters 属性来排除特定的组件,这通常用于排除一些自动配置的组件,或者防止某些类被意外地注册为 Bean。

包含特定组件:使用 includeFilters 属性可以包含特定的组件,这在需要精确控制哪些组件被扫描和注册时非常有用。

关键点

  • @SpringBootApplication注解默认行为:它包括了@Configuration,@EnableAutoConfiguration,和@ComponentScan。默认情况下,@ComponentScan会扫描主应用类所在的包及其子包。
  • @ComponentScan的覆盖行为:当在同一个配置类上显式地使用@ComponentScan时,它会覆盖@SpringBootApplication中的默认@ComponentScan设置。这意味着,如果在@ComponentScan中指定了不同的basePackages或scanBasePackageClasses,那么只有这些指定的包会被扫描。

关键点就是@ComponentScan注解设置的包路径覆盖了@SpringBootApplication注解默认的扫描包,不光影响了处理器,可执行模块中所有标记@Component、@Service、@Repository 和 @Controller注解的类都应该受到了影响。

最终解决办法

方法一

既然@SpringBootApplication注解默认会扫描主应用类所在的包及其子包。在使用@ComponentScan时把主应用所在的包也添加进去。

@SpringBootApplication

@MapperScan(value = {"cn.jet.moduledb.dao"})

@ComponentScan(basePackages = {"cn.jet.moduledb.service","cn.jet.moduleseckill.controller"})

public class ModuleSeckillApplication {

}

方法二

既然在同一个类上显式地使用@ComponentScan和@SpringBootApplication时,@SpringBootApplication默认的扫描的包会被覆盖,我就在添加一个单独的配置类

@SpringBootApplication

@MapperScan(value = {"cn.jet.moduledb.dao"})

public class ModuleSeckillApplication {

    public static void main(String[] args) {

        SpringApplication.run(ModuleSeckillApplication.class, args);

}

}

@Configuration

@ComponentScan(basePackages = "cn.jet.moduledb.service") // 额外的扫描路径

class AdditionalComponentScanConfig {

    // 确保这个配置类位于主应用类能够扫描到的包中

}

感觉方法二更清晰好些,只添加额外的扫描的包路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/60235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot实现文件上传并返回url链接

检查依赖 确保pom.xml包含了Spring Boot Web的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>创建Controller 创建公用上传文件控制器 package…

Chrome DevTools Protocol 入门:相关概念

前言 在上篇文章中&#xff0c;我们快速地使用了 Chrome DevTools Protocol&#xff08;CDP&#xff09;发送指令&#xff0c;成功实现了一些浏览器自动化操作。然而&#xff0c;要想深入使用 CDP&#xff0c;还需要对其中的 协议概念 有更深入的理解。这些概念不仅是我们与浏…

FPGA学习笔记#7 Vitis HLS 数组优化和函数优化

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记&#xff1a;《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…

苍穹外卖05-Redis相关知识点

目录 什么是Redis&#xff1f; redis中的一些常用指令 value的5种常用数据类型 各种数据类型的特点 Redis中数据操作的常用命令 字符串类型常用命令&#xff1a; 哈希类型常用命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 在java中操作Redis 环境…

SpringBoot(八)使用AES库对字符串进行加密解密

博客的文章详情页面传递参数是使用AES加密过得,如下图所示: 这个AES加密是通用的加密方式,使用同一套算法,前端和后端都可以对加密之后的字符串进行加密解密操作。 目前线上正在使用的是前端javascript进行加密操作,将加密之后的字符串再传递到后端,PHP再进行解密操作。…

前端常用时间操作汇总

&#xff08;1&#xff09;获取中国标准时间&#xff1a; let now new Date(); ​ // Thu Nov 14 2024 17:13:49 GMT0800 (中国标准时间) &#xff08;2&#xff09;获取年份&#xff1a; let year now.getFullYear(); ​ // 2024 &#xff08;3&#xff09;获取月份&…

【Windows erver】配置高性能电源管理

操作场景 在 Windows Server 操作系统上&#xff0c;需要配置高性能电源管理&#xff0c;才能支持实例软关机&#xff0c;否则云服务器控制台只能通过硬关机的方式关闭实例。本文档以 Windows Server 2012 操作系统为例&#xff0c;介绍配置电源管理的方法。 操作说明 修改电…

《线性代数》学习笔记

列向量无关 上个星期继续学线性代数&#xff0c;一个矩阵&#xff0c;如何判断它是的列向量有几个是线性无关呢&#xff1f;其实有好几个方法。第一个就是一个一个判断。 先选定一个&#xff0c;然后看下这两个&#xff0c;怎么看呢&#xff1f;如果两个列向量线性相关&#…

【JAVA基础】MAVEN的安装及idea的引用说明

本篇文章主要讲解&#xff0c;maven的安装及集成在idea中进行构建项目的详细操作教程。 日期&#xff1a;2024年11月11日 作者&#xff1a;任聪聪 所需材料&#xff1a; 1、idea 2024版本及以上 2、maven 3.9.9安装包 3、一个空java springBoot项目&#xff0c;可以使用阿里云…

Rust学习(二):rust基础语法Ⅰ

Rust学习&#xff08;二&#xff09;——rust基础语法Ⅰ&#xff1a; 1、关键字&#xff1a; 了解编程语言的同学都清楚&#xff0c;关键字在一门编程语言中的意义&#xff0c;所谓关键字就是语言的创造者及后续开发者们&#xff0c;以及定义好的具有特殊含义和作用的单词&am…

AI变现,做数字游民

在数字化时代&#xff0c;AI技术的迅猛发展不仅改变了各行各业的生产方式&#xff0c;还为普通人提供了前所未有的变现机会。本文将探讨如何利用AI技术实现变现&#xff0c;成为一名数字游民&#xff0c;享受自由职业带来的便利与乐趣。 一、AI技术的变现潜力 AI技术以其强大…

解非线性方程

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的&#xff1a;进一步熟练掌握解非线性方程的二分法算法、牛顿迭代法&#xff0c;提高编程能力和解算非线性方程问题的实践技能。 实验内容&#xff1a;用二分法算法(取[a,b][1,2])、牛顿迭代法解算非线性…

详细分析Guava库中的注解@VisibleForTesting,用于标记提醒私有(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于Java基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 从实战中学习&#xff1a; 源码如下&…

Ubuntu 22.04.5 配置vlan子接口和网桥

使用bond为物理接口&#xff0c;bond配置可以参考&#xff1a;https://blog.csdn.net/qq_50247813/article/details/143630081 实验一、配置vlan子接口 创建bond0&#xff0c;模式为802.3ad&#xff1b;从网卡&#xff0c;ens37&#xff0c;ens38&#xff0c;添加子接口 bond0.…

Hadoop(YARN)

文章目录 YARN基础架构YARN工作原理YARN调度器和调度算法先进先出调度器容量调度器公平调度器 YARN常用命令 YARN基础架构 YARN是Hadoop集群的资源管理和调度系统&#xff0c;它负责为各种分布式计算任务分配和管理资源,包含以下组件&#xff1a;ResourceManager&#xff0c;N…

【GoWeb示例】通过示例学习 Go 的 Web 编程

文章目录 你好世界HTTP 服务器路由&#xff08;使用 gorilla/mux&#xff09;连接到 MySQL 数据库MySQL 数据库简单操作模板静态资源和文件操作表单处理中间件&#xff08;基础&#xff09;中间件&#xff08;高级&#xff09;会话JSONWebsockets密码哈希 你好世界 Go语言创建…

【C语言】Union

一.Union的用法 1.什么是Union? union 共用体名{ 成员列表 }; union&#xff0c;“联合体、共用体”&#xff0c;在某种程度上类似结构体struct的一种数据结构&#xff0c;共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 2.为什么使用union&#xff1…

2024最新版JavaScript逆向爬虫教程-------基础篇之Chrome开发者工具学习

目录 一、打开Chrome DevTools的三种方式二、Elements元素面板三、Console控制台面板四、Sources面板五、Network面板六、Application面板七、逆向调试技巧7.1 善用搜索7.2 查看请求调用堆栈7.3 XHR 请求断点7.4 Console 插桩7.5 堆内存函数调用7.6 复制Console面板输出 工欲善…

Debezium日常分享系列之:异步 Debezium 嵌入式引擎

Debezium日常分享系列之&#xff1a;异步 Debezium 嵌入式引擎 动机目标非目标保留Kafka Connect模型计划的更改线程池并行运行源任务存储偏移量并发处理CDC事件禁用CDC事件的完全排序自定义记录处理器并行处理记录的选项存储偏移量引擎状态和生命周期防止资源泄漏异常处理退出…

大数据学习12之HBase

1.基本概念 1.1简介 Apache HBase&#xff08;Hadoop DataBase&#xff09;是一个开源的、高可靠性、高性能、面向列&#xff08;这里指列族&#xff0c;非列式存储&#xff09;、可伸缩、实时读写的分布式数据库&#xff0c;其设计思想来源于 Google 的 BigTable 论文。利用 …