我的问题看起来很简单,但我无法解决它。我有一个属性文件,其中包含所有环境(dev,qa,prod)的配置详细信息。
示例config.properties
:
dev.maxLength=2000
qa.maxLength=4000
我们有一个父属性文件,其中包含主机名,环境映射。
示例hosts.properties
:
host1=dev
host2=qa
属性名称host1
存储在bean hostname
中。
<bean id="hostname"
factory-bean="localhostInetAddress"
factory-method="getHostName"/>
要解析配置属性名称,我必须按如下方式加入字符串,
${${**hostname**}.maxLength}
应解析为${dev.maxLength}
我尝试使用SpEL但没有成功。我得到Could not resolve placeholder
例外。如何在属性占位符中连接bean值?如何构建动态属性名称?
春季版3.2
答案 0 :(得分:14)
要连接从Spring属性占位符解析的值,您需要使用单个quoutes(''
)转义它们的值,并使用#{}
通过SpEL表达式包装占位符表达式。
<bean id="myService" class=""com.services.MyService">
...
<property name="endpointAddress" value="#{'${server}' + ':' + '${port}' + '${endpoint}'}" />
</bean>
其中:
server = http://domain.host.com
port = 7777
endpoint = / services / myservice
结果将是:
答案 1 :(得分:2)
最好在自己的文件中使用特定于环境的属性并使用Spring Profiles。 例如,我有四个仅用于db配置的xml文件,local.db.xml,dev.db.xml,qa.db.xml和prod.db.xml。 在每个db.xml中,我将配置文件设置为适当的值。
我的local.db.xml有
<beans profile="db.local" .. >
为了启动Tomcat,我按如下方式指定VM选项
-Dspring.profiles.active=db.local
答案 2 :(得分:2)
我通过将PropertyPlaceholderConfigurer
bean更改为Properties
来解决了这个问题。
可以在SpEL中访问<util:properties/>
。
实施例:
"#{prop[host+'.'+'maxLength']}"
其中host
是一个字符串bean。