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

时间:2015-10-01 10:01:16

标签: spring spring-boot

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

1 个答案:

答案 0 :(得分: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);
    }

}

另一种选择是提供除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);
    }

}

您在ServletContainerConfigurationStandaloneConfiguration中的具体操作由您决定。例如,您可以发布一个记住模式的bean,然后在需要知道时查询它。

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