Spring Boot 3.2.4多模块同名Application类Bean冲突问题咨询
问题原因
Spring Boot 3.x 对配置类的Bean命名与扫描逻辑做了调整,当多模块项目中两个标注@SpringBootApplication的启动类同名且被同一个Spring上下文扫描到时,默认会以类名首字母小写作为Bean名称,导致两个Application类生成的Bean名称均为application,触发Bean定义冲突。而Spring Boot 2.4.2中可能因扫描范围的隐性限制或命名策略差异,未触发该问题。
解决方案
以下几种方法均可解决该冲突:
- 重命名启动类:将其中一个模块的启动类改名,比如把calculation模块的启动类改为
CalculationApplication,customer模块的改为CustomerApplication。默认生成的Bean名称会变为calculationApplication和customerApplication,自然规避冲突。 - 手动指定Bean名称:在其中一个启动类的
@SpringBootApplication注解中显式指定Bean名称,示例:@SpringBootApplication(name = "calculationApplication") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } - 缩小扫描范围:调整customer模块启动类的扫描配置,只扫描自身模块的包,避免将依赖模块的启动类纳入扫描范围。示例:
@SpringBootApplication(scanBasePackages = "com.customer.xxx") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
内容的提问来源于stack exchange,提问作者Biel Chen
相关产品推荐
相关产品推荐

