是否有一些可靠的方法来检查Spring引导是在JAR(独立嵌入式tomcat)还是WAR(j2ee服务器)模式下运行?
答案 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);
}
}
您在ServletContainerConfiguration
或StandaloneConfiguration
中的具体操作由您决定。例如,您可以发布一个记住模式的bean,然后在需要知道时查询它。
另一种选择是根据模式激活不同的配置文件。