SpringApplication.run Main方法

pkwftd7m  于 2022-09-21  发布在  Spring
关注(0)|答案(3)|浏览(124)

我使用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行,然后添加来自要运行的其他类的Main方法。除了这个快速的曾傑瑞平台,我可以使用Maven构建它,它在某种程度上是作为一个Spring应用程序运行的。

然而,我宁愿不必注解掉这一行,而使用完整的Spring框架。我怎么能这样做呢?

ki1q1bka

ki1q1bka1#

您需要运行SpringApplication.run(),因为该方法启动整个Spring框架。下面的代码将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才被创建(RestTool)。

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

khbbv19g

khbbv19g2#

使用:

@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方法下添加代码的另一种方法是使用实现CommandLineRunner的Spring Bean。这将看起来像是:

@Component
public class ReconTool implements CommandLineRunner {

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

从Spring的官方指南资源库查看this指南。

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

nsc4cvqm

nsc4cvqm3#

另一种方法是扩展应用程序(因为我的应用程序继承和定制父应用程序)。它自动调用父级及其命令行运行器。

@SpringBootApplication
public class ChildApplication extends ParentApplication{
    public static void main(String[] args) {
        SpringApplication.run(ChildApplication.class, args);
    }
}

相关问题