在@SpringBootApplication外部执行CommandLineRunner

时间:2016-08-11 05:02:34

标签: spring spring-boot

这基于https://spring.io/guides/gs/accessing-data-jpa/ 我尝试将Application移动到另一个包中的另一个类中(demo()仍位于文件系统层次结构之上)

启动项目时如何让package com.company.app @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } } 运行?

Application.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");
        };
    }
}

CommandLineRunner.java

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql

1 个答案:

答案 0 :(得分:3)

@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)。