我知道@Conditional
注释,但不确定如何在这个问题中使用它。请告诉我spring-boot
如何检测部署服务器是tomcat
还是JBoss
。
在代码级别,它或多或少归结为以下代码,这些代码试图使用ClassLoader
来加载属于Tomcat/Undertow的类(在WildFly中使用的网络服务器(即JBoss((。如果该类可以成功加载,则得出结论,它被部署到该服务器:
classLoader.loadClass(className)
例如,要检查它是否部署到Tomcat,它可以尝试加载org.apache.catalina.startup.Tomcat
。对于暗流,它可以检查io.undertow.Undertow
当与 Spring boot 一起使用时,你可以使用以下公式声明 bean:
@Bean
@ConditionalOnClass(name={"org.apache.catalina.startup.Tomcat"})
public class Foo fooOnlyActivatedOnTomcat(){
}
@Bean
@ConditionalOnClass(name={"io.undertow.Undertow"})
public class Foo fooOnlyActivatedOnUndertow(){
}