2013-08-16 32 views
0

這是我的問題:我必須讀取一個屬性(activemq.connector.port)並將其添加2,然後使用該屬性在ManagementContext上設置屬性(connectorPort)。這裏的屬性來自一個文件或者它可能是系統屬性。春天並不在乎我想。使用Spring表達式語言定義xml屬性

<amq:broker id="broker" useJmx="true" persistent="true"> 
     <amq:managementContext createConnector="true" connectorPort="#{${activemq.connector.port}+2}"/> 
     <amq:transportConnectors> 
      <amq:transportConnector uri="vm://localhost:${activemq.connector.port:1099}"/> 
     </amq:transportConnectors> 
</amq:broker> 

當我試圖做到這一點時,我得到了這個異常。

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '{1099 + 2 }' is defined 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:568) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1108) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:278) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) 

如何使這項工作?有沒有其他方法來實現這一目標?

+0

你在使用''嗎? – user2550754

回答

1

之前只是試一試:「#{2 + $ {activemq.connector .port}}」強制spEL使用佔位符作爲數字。

否則使用此語法(是規劃環境地政司表示法Java代碼Integer.valueOf(value of 'activemq.connector.port') + 2):

#{ T(java.lang.Integer).valueOf('${activemq.connector.port}') + 2 } 

大概$ {}被管理爲字符串,而不是作爲數目這麼一個「演員」,需要 T(Class).<staticMethod>(params)是spEL語法來調用靜態方法

0

我有一個非常類似的問題。 我使用的是Spring 4.2.7.RELEASE和ActiveMQ 5.13.4。 我更喜歡一個XML文件來配置ActiveMQ的,所以我設置了以下內容的XML文件:

<persistenceAdapter> 
     <kahaDB 
      directory="${activemq.persistence.directory}/KahaDB" 
      journalMaxFileLength="#{100*1024*1024}" 
      indexWriteBatchSize="100" 
      enableIndexWriteAsync="true" 
      concurrentStoreAndDispatchQueues="false" 
      concurrentStoreAndDispatchTopics="false" /> 
    </persistenceAdapter> 

然後我得到了以下錯誤消息: 產生的原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有定義名爲「{100 * 1024 * 1024}」的bean。

我可以通過在#之前添加空格來解決該問題。奇怪......看起來還有另外一種逃脫機制。我不明白。

在我的情況下,我使用更方便的語法「100 Mb」來解決問題。

相關問題