如何检查Spring boot是以独立模式还是嵌入式模式运行?

如何检查Spring boot是以独立模式还是嵌入式模式运行?,spring,spring-boot,Spring,Spring Boot,有没有可靠的方法来检查spring boot是在JAR(独立的嵌入式tomcat)模式下运行还是在WAR(j2ee服务器)模式下运行?没有内置的API来检查您在哪个环境下运行。最可靠的方法可能是为应用程序使用不同的配置,这取决于它是通过其主方法还是通过其SpringBootServletInitializer子类启动的。确切地说,你应该做什么取决于你需要知道的原因和个人偏好 例如,您可以配置一个属性,通过环境,使用@Value等进行查询: @SpringBootApplication publi

有没有可靠的方法来检查spring boot是在JAR(独立的嵌入式tomcat)模式下运行还是在WAR(j2ee服务器)模式下运行?

没有内置的API来检查您在哪个环境下运行。最可靠的方法可能是为应用程序使用不同的配置,这取决于它是通过其主方法还是通过其
SpringBootServletInitializer
子类启动的。确切地说,你应该做什么取决于你需要知道的原因和个人偏好

例如,您可以配置一个属性,通过
环境
,使用
@Value
等进行查询:

@SpringBootApplication
public class ExampleApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ExampleApplication.class).properties(
                "com.example.mode:servlet-container");
    }

    public static void main(String[] args) throws Exception {
        new SpringApplicationBuilder(ExampleApplication.class).properties(
                "com.example.mode:standalone").run(args);
    }

}
另一个选项是除了提供一个配置类之外,还提供一个配置类,该配置类根据运行模式的不同而有所不同:

@SpringBootApplication
public class ExampleApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ExampleApplication.class, 
                ServletContainerConfiguration.class);
    }

    public static void main(String[] args) throws Exception {
        new SpringApplicationBuilder(ExampleApplication.class,
                StandaloneConfiguration.class).run(args);
    }

}
您在
ServletContainerConfiguration
StandaloneConfiguration
中的具体操作取决于您自己。例如,您可以发布一个能够记住模式的bean,然后在需要时查询它

另一种选择是根据模式激活不同的配置文件