使用命令行运行器在Spring启动应用程序中创建Bean

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用命令行运行器在Spring启动应用程序中创建Bean相关的知识,希望对你有一定的参考价值。

@SpringBootApplication public class ReactiveCouchbaseExample1Application {

@Bean
CommandLineRunner employees(ApplicationContext context) {
    EmployeeRepository repository = context.getBean(EmployeeRepository.class);
    return args -> {
        repository
            .deleteAll()
            .subscribe(null,null,()->{
                Stream.of(new Employees(UUID.randomUUID().toString(), "Nikhil", 23, 3000L),
                        new Employees(UUID.randomUUID().toString(), "Shubham", 23, 3000L),
                        new Employees(UUID.randomUUID().toString(), "Anshul", 23, 3000L))
                .forEach(employee->{
                    repository.save(employee)
                    .subscribe(System.out::println);
                });
            });
    };
}

public static void main(String[] args) {
    SpringApplication.run(ReactiveCouchbaseExample1Application.class, args);
}

我希望在我的应用程序上下文加载后运行这条逻辑但是当我启动我的应用程序时它会显示此错误。

Method employees in com.reactive.reactivecouchbaseexample1.ReactiveCouchbaseExample1Application required a bean of type 'com.reactive.repository.EmployeeRepository' that could not be found.

有人能告诉我如何在CommandLineRunner中创建一个存储库bean。我也搜索了它,但无法找到任何答案。

这是我的存储库

@Repository
public interface EmployeeRepository extends 
ReactiveCouchbaseRepository<Employees, String>{ 
}
答案

扫描的组件必须与@SpringBootApplication带注释的类或其子包在同一个包中。我只能假设它是ReactiveCouchbaseExample1Application.class

也许您的仓库在不同的包装中,或者您没有使用@SpringBootApplication@ComponentScan启用组件扫描。

以上是关于使用命令行运行器在Spring启动应用程序中创建Bean的主要内容,如果未能解决你的问题,请参考以下文章

使用 JPA 和 mysql 启动在 Spring Boot 中创建的应用程序时出错

使用 Spring Command Line Runner 初始化数据

如何在 Spring Boot 中创建不同的 ThreadPoolTask​​Executor? [复制]

如何在CAD中创建一个实体

Spring Boot:如果不存在,则在启动时在 mongodb 中创建文档

如何使用带有路径的“开始”和带有空格的命令在 Windows 中创建批处理文件