我想在春季启动中创建基于tomcat,jboss等服务器的bean



我知道@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(){
}

最新更新