Java 我可以为Spring Boot应用程序创建多个入口点吗?

Java 我可以为Spring Boot应用程序创建多个入口点吗?,java,spring-boot,config,Java,Spring Boot,Config,在Spring Boot中,需要指定一个主类,它是应用程序的入口点。通常这是一个带有标准main方法的简单类,如下所示 @SpringBootApplication public class MySpringApplication { public static void main(String [] args) { SpringApplication.run(MySpringApplication.class, args); } } 然后,当应用程序运行时,

Spring Boot中,需要指定一个主类,它是应用程序的入口点。通常这是一个带有标准main方法的简单类,如下所示

@SpringBootApplication
public class MySpringApplication {

    public static void main(String [] args) {
        SpringApplication.run(MySpringApplication.class, args);
    }
}
然后,当应用程序运行时,该类被指定为主入口点


但是,我想使用不同的主类运行我的代码,使用config来定义它,而不使用不同的
jar
!!(我知道重建jar将使我能够指定一个替代的主类,但这实际上给了我两个应用,而不是一个!那么,我如何才能将一个
jar
与两个主类一起使用,并通过Springapplication.yml文件选择要使用的一个呢?

我会坚持原来的模式,即只使用ne main类和main方法,但是在该方法中,您可以配置您想要去的地方。也就是说,不要有两个main方法并配置调用的方法,而是将这两个方法作为普通方法,并创建一个main方法,使用配置来确定两个方法中的哪一个得到运行。

我找到了答案-使用mmandLineRunner接口

所以现在我有两个班

public class ApplicationStartupRunner1 implements CommandLineRunner {

@Override
public void run(String... args) throws Exception {
    //implement behaviour 1 
}

以及如何在配置中在它们之间切换

@Configuration
public class AppConfig {

    @Value("${app.runner}")
    private int runner;

    @Bean
    CommandLineRunner getCommandLineRunner() {
        CommandLineRunner clRunner = null;
        if (runner == 1) {
            clRunner = new ApplicationStartupRunner1();
        } (else if runner == 2) {
            clRunner = new ApplicationStartupRunner2();
        } else {
            //handle this case..
        }

        return clRunner;
    }
}
最后,在application.properties文件中,使用

app.runner=1

目的是什么?Spring Boot的入口点看起来像
SpringApplication.run(className,args)
,为什么要创建自己类的实例以及其中的代码是什么?@AndresToilko我想将CLI作为安装测试的单独入口点包含到SpringBoot中-面临同样的问题。不幸的是,Spring配置在调用application.run方法之后才加载,因此主方法在confi之前已经运行g是已知的。
app.runner=1