这是我的问题:我必须读取一个属性(activemq.connector.port
)并向其中添加2并使用它在bean connectorPort
上设置属性(ManagementContext
)。这里的属性来自一个文件,或者它可能是系统属性。我想,春天并不在乎。
<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 :(得分:1)
在尝试之前:“#{2 + $ {activemq.connector .port}}”强制spEL使用占位符作为数字。
Else使用此语法(是Java代码Integer.valueOf(value of 'activemq.connector.port') + 2
的spEL表示法):
#{ T(java.lang.Integer).valueOf('${activemq.connector.port}') + 2 }
可能$ {}作为String管理而不是Number,因此需要“强制转换”
T(Class).<staticMethod>(params)
是调用静态方法的spEL语法
答案 1 :(得分: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:没有名为&#39; {100 * 1024 * 1024}&#39;是定义。
我可以通过在#之前添加空格来解决此问题。奇怪......看起来还有另一种逃脱机制。我不明白。
就我而言,我使用语法&#34; 100 Mb&#34;来解决问题。那更方便。