spring - 在 @SpringBootApplication 外部执行 CommandLineRunner

标签 spring spring-boot

这是基于https://spring.io/guides/gs/accessing-data-jpa/ 我尝试将 demo() 移动到不同包中的不同类中(Application 仍然位于文件系统层次结构的顶部)

如何让 demo() 在启动项目时运行?

应用程序.java

package com.company.app

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
          SpringApplication.run(Application.class);
  }
}

CommandLineRunner.java

package com.company.app.runner

public class Test {

    @Bean
    public CommandLineRunner demo() {
        System.out.print("Run 1");
        return (args) -> {
            System.out.print("Run 2");
        };
    }
}

最佳答案

@Configuration添加到Test类中,以便在扫描类路径时拾取它。

我以前没有见过 CommandLineRunner 的 Lambda。非常漂亮,无需创建专门实现 CommandLineRunner 的类。

否则,您可以实现 CommandLineRunner 来测试并注释为 @Component。

@Component
public class ApplicationLoader implements CommandLineRunner {

    @Override
    public void run(String... strings) throws Exception {
        System.out.print("Run 2");
    }
}

* 更新 * 通过此更新回答评论中的问题,因为我有更多的空间可以输入...

@SpringBootApplication 按照您的指示组成其他注释,但这些注释仅应用于定义它的特定类。 @Configuration注释告诉 Spring 该类定义了应该由应用程序上下文管理的 bean。 @ComponentScan告诉 spring 在类路径中查找具有特定注释的类(例如 @Component@Service@Configuration),然后对这些类执行操作基于注释类型的类。 @EnableAutoConfiguration是根据项目依赖项加载适当 bean 的魔法(例如,如果 mongo 驱动程序位于类路径上,则创建一个 MongoTemplate)。

关于spring - 在 @SpringBootApplication 外部执行 CommandLineRunner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38887595/

相关文章:

java - 实现自定义 Spring Security 身份验证方法

spring-boot - 在 Spring Boot 应用程序中将 Autowiring 的对象作为模拟注入(inject)到 spock 测试中

java - Spring 。带有@Configuration 注解的配置类。拥有多个配置类是否正确?

java - 插入后如何自动更新 View

Spring 对 If-Match Header 的支持

java - 非公共(public)构造函数导致 Tomcat7 出现问题?

java - 选择在运行时 spring 注入(inject)哪个实现

java - Spring Boot Web 应用程序没有缓存控制 header

java - 禁止 Spring 接受 POST 参数作为查询参数

java - Bean 被初始化但注入(inject)抛出 npe