Spring bean创建有条件地@ConditionalOn

时间:2017-07-31 23:23:54

标签: java spring spring-bean

我想在httpPort值不等于-1时创建Bean。我尝试下面的代码,但它抱怨表达式有问题。你能解决这个问题吗?或者如何达到我的要求。

我正在使用Java 8和Spring Boot 1.5.4

我尝试了以下选项

@ConditionalOnExpression("'${httpPort}' ne '-1'")
@ConditionalOnExpression("'${httpPort}' != '-1'")
@ConditionalOnExpression("!'${httpPort}'=='-1'")
@ConditionalOnExpression("!'${httpPort == -1}'")
@ConditionalOnExpression("!${httpPort == -1}")
  

大多数情况错误是EL1041E:解析有效表达式后,   表达式中还有更多数据:' lcurly({)'

@Configuration
public class TomcatConfig {
    @Value("${server.http.port:-1}")
    private int httpPort;

    @Bean
    @ConditionalOnExpression("'${httpPort}' ne '-1'")
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return new EmbeddedServletContainerCustomizer() {
            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {
                if (container instanceof TomcatEmbeddedServletContainerFactory) {
                    TomcatEmbeddedServletContainerFactory containerFactory =
                            (TomcatEmbeddedServletContainerFactory) container;

                    Connector connector = new Connector(TomcatEmbeddedServletContainerFactory.DEFAULT_PROTOCOL);
                    connector.setPort(httpPort);
                    containerFactory.addAdditionalTomcatConnectors(connector);
                }
            }
        };
    }
}

1 个答案:

答案 0 :(得分:1)

通过@ConditionalOnProperty(“server.http.port”)

解决了这个问题
@ConditionalOnProperty("server.http.port")
public EmbeddedServletContainerCustomizer containerCustomizer() {
}