如何检查Spring启动是在独立模式还是嵌入模式下运行?

Mej*_*jmo 3 spring spring-boot

是否有一些可靠的方法来检查Spring引导是否在JAR(独立嵌入式tomcat)或WAR(j2ee服务器)模式下运行?

And*_*son 6

没有内置的API来检查您正在运行的环境.可能最强大的方法是为您的应用程序使用不同的配置,具体取决于它是通过主方法还是通过其SpringBootServletInitializer子类启动的.你究竟应该做什么取决于你需要知道的原因以及个人偏好.

例如,您可以通过Environment,使用@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);
    }

}
Run Code Online (Sandbox Code Playgroud)

另一种选择是ExampleApplication.class根据您运行的模式提供除了不同的配置类:

@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);
    }

}
Run Code Online (Sandbox Code Playgroud)

正是你在做什么,ServletContainerConfiguration或者StandaloneConfiguration由你决定.例如,您可以发布一个记住模式的bean,然后在需要知道时查询它.

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