SpringApplication.run 主要方法

新手上路,请多包涵

我使用 Spring Starter 项目模板在 Eclipse 中创建了一个项目。

它自动创建了一个 Application 类文件,并且该路径与 POM.xml 文件中的路径相匹配,所以一切都很好。这是应用程序类:

 @Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

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

这是我正在构建的命令行应用程序,为了让它运行,我必须注释掉 SpringApplication.run 行,然后添加我其他类中的主要方法来运行。除了这个快速的 jerry-rig,我可以使用 Maven 构建它并且它作为 Spring 应用程序运行,有点。

但是,我宁愿不必注释掉该行,而是使用完整的 Spring 框架。我怎样才能做到这一点?

原文由 Alexander Mills 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 355
2 个回答

您需要运行 SpringApplication.run() 因为此方法会启动整个 Spring Framework。下面的代码将您的 main() 与 Spring Boot 集成。

Application.java

 @SpringBootApplication
public class Application {

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

ReconTool.java

 @Component
public class ReconTool implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        main(args);
    }

    public static void main(String[] args) {
        // Recon Logic
    }
}

为什么不 SpringApplication.run(ReconTool.class, args)

因为这种方式 spring 没有完全配置(没有组件扫描等)。只创建在 run() 中定义的 bean (ReconTool)。

示例项目: https ://github.com/mariuszs/spring-run-magic

原文由 MariuszS 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用:

 @ComponentScan
@EnableAutoConfiguration
public class Application {

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

        //do your ReconTool stuff
    }
}

将在所有情况下工作。是否要从 IDE 或构建工具启动应用程序。

使用 Maven 只需使用 mvn spring-boot:run

而在 gradle 中它将是 gradle bootRun

在 run 方法下添加代码的另一种方法是让 Spring Bean 实现 CommandLineRunner 。那看起来像:

 @Component
public class ReconTool implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
       //implement your business logic here
    }
}

从 Spring 的官方指南库中查看 指南。

可以在 此处 找到完整的 Spring Boot 文档

原文由 geoand 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏