一、以ssl为配置为例子
ts:
ssl:
enabled: true
@Configuration
public class SslConfig {
@Bean
@ConditionalOnProperty(prefix = "ts",name = "ssl.enabled", havingValue = "true")
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
@ConditionalOnProperty(prefix = "ts",name = "ssl.enabled", havingValue = "true")
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
}
二、其他
@ConditionalOnBean 当容器有指定Bean的条件下
@ConditionalOnClass 当容器有指定类的条件下
@ConditionalOnExpression 基于SpEL表达式作为判断条件
@ConditionalOnJava 基于JVM版本作为判断条件
@ConditionalOnJndi 在JDNI存在的条件下查找指定位置
@ConditionalOnMissingBean 当容器没有指定Bean的情况下
@ConditionalOnMissingClass 当容器没有指定类的情况下
@ConditionalOnNotWebApplication 当前项目不是Web项目的条件下
@ConditionalOnProperty 指定的属性是否有指定的值
@ConditionalOnResource 类路径是否有指定的值
@ConditionalOnSingleCandidate 当前指定Bean在容器中只有一个,或者虽然有多个但是指定首选Bean
@ConditionalOnWebApplication 当前项目是Web项目的情况下