java
  • spring
  • spring-bean
  • 2017-07-31 99 views 1 likes 
    1

    我只想在httpPort值不等于-1时才创建一个Bean。我尝试了下面的代码,但它抱怨表达式有问题。你能解决这个问题吗?或如何达到我的要求。有条件地创建Spring bean @ConditionalOn

    我使用Java 8和Spring 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

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

    @ConditionalOnProperty("server.http.port") 
    public EmbeddedServletContainerCustomizer containerCustomizer() { 
    } 
    
    +0

    这是一个很好的解决方案,它不是比较-1默认值设置,而是只如果该参数在第一位置设置解决了这个。 – UserF40

    相关问题