java
  • spring
  • spring-bean
  • 2017-07-31 63 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

    相關問題