SpringBoot中CommandLineRunner未执行问题求助
问题解决:SpringBoot中CommandLineRunner的run方法未执行
问题原因
SpringBoot的@SpringBootApplication注解默认包含@ComponentScan功能,仅会扫描主类所在包及其子包中的组件。你的主类位于com.jpa.tutorialjpa包,而CourseCommandLineRunner在course包,不在默认扫描范围内,导致Spring无法识别该@Component,因此不会执行其run方法。
解决方案
以下三种方式任选其一即可:
1. 调整包结构
将CourseCommandLineRunner类移动到主类所在包或其子包下,例如com.jpa.tutorialjpa.course,这样默认组件扫描就能覆盖到该类。
2. 指定扫描包路径
在主类的@SpringBootApplication注解中添加scanBasePackages属性,明确指定需要扫描的包:
package com.jpa.tutorialjpa; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(scanBasePackages = {"com.jpa.tutorialjpa", "course"}) public class TutorialJpaApplication{ public static void main(String[] args) { SpringApplication.run(TutorialJpaApplication.class, args); System.out.println("======LOADED="); } }
3. 指定扫描的类所在包
通过scanBasePackageClasses属性,直接指定需要扫描的类(Spring会扫描这些类所在的包):
package com.jpa.tutorialjpa; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import course.CourseCommandLineRunner; @SpringBootApplication(scanBasePackageClasses = {TutorialJpaApplication.class, CourseCommandLineRunner.class}) public class TutorialJpaApplication{ public static void main(String[] args) { SpringApplication.run(TutorialJpaApplication.class, args); System.out.println("======LOADED="); } }
修改完成后重启项目,即可看到CourseCommandLineRunner中的打印语句正常输出。
内容的提问来源于stack exchange,提问作者aayush mohanka
相关产品推荐
相关产品推荐

