【问题标题】:CommandLineRunner run() method is not being called未调用 CommandLineRunner run() 方法
【发布时间】:2021-06-24 13:18:52
【问题描述】:

我已经尝试了这个平台上提供的所有答案,但没有奏效。我正在执行这个命令行运行器,但没有调用 run 方法。

感谢您的帮助。

谢谢。

我尝试了以下解决方案,但得到了这个异常。

1st:在你的Bootstrap类(主方法为SpringApplication.run(..., args)的类),你可以在@SpringBootApplication注解处添加属性scanBasePackages:

@SpringBootApplication(scanBasePackages = {"com.project.data.runner"}) 这将告诉 Spring 在 com.project.data.runner 包中查找组件。

【问题讨论】:

    标签: spring-boot hibernate


    【解决方案1】:

    您的 Bootstrap 类位于包 com.project.demo.data

    你的命令行运行器在包com.project.data.runner

    Spring 会扫描com.project.demo.data 的子包中的组件,也就是com.project.demo.data.* 中的组件,这就是你的命令行运行器永远不会运行的原因。 Spring从未找到他。

    你有一些选择,但我会说两个:

    1st:在您的Bootstrap类(具有main方法和SpringApplication.run(..., args)的类),您可以在@SpringBootApplication注解处添加属性scanBasePackages

    @SpringBootApplication(scanBasePackages = {"com.project.data.runner"})
    

    这将告诉 Spring 在 com.project.data.runner 包中查找组件。

    2nd:将命令行运行器从 com.project.data.runner 移动到 com.project.demo.data.runner(或 com.project.demo.data 下的类似内容)

    更新

    由于我们已经解决了聊天中的问题,我会用解决方案更新答案。

    由于您使用的是 Spring Data JPA 存储库,如果您的存储库不在 Bootstrap 类所在的包或子包下,则必须将 @EnableJpaRepositories 添加到 @Configuration 类并显式配置哪个包您的存储库是。

    您的引导类将如下所示:

    @SpringBootApplication(scanBasePackages = { "com.project.data.runner"})
    @Configuration
    @EntityScan("com.project.data.entity")
    @EnableJpaRepositories(basePackages = { "com.project.data.repository" })
    public class DataJpaApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DataJpaApplication.class, args);
        }
    }
    

    【讨论】:

    • 嗨,Matheus,我尝试了第一种解决方案,但遇到了异常。我已附上屏幕截图。
    • 并尝试了第二个但没有成功。
    • 你的PassangerRepository在哪个包中?
    • 它在“com.project.data.repository”包中
    • 我们去聊天吧,我已经测试过了,在这里可以正常工作。