8

我的问题看起来很简单,但我无法解决。我有一个属性文件,其中包含所有环境(dev、qa、prod)的配置详细信息。

示例config.properties

dev.maxLength=2000  
qa.maxLength=4000

我们有一个父属性文件,其中包含主机名、环境映射。

示例hosts.properties

host1=dev
host2=qa

属性名称host1存储在 beanhostname中。

<bean id="hostname"
  factory-bean="localhostInetAddress"
  factory-method="getHostName"/> 

要解析配置属性名称,我必须按如下方式加入字符串, ${${**hostname**}.maxLength}应将其解析为${dev.maxLength}

我尝试使用 SpEL 没有成功。我得到了Could not resolve placeholder例外。如何在属性占位符中连接 bean 值?动态属性名称是如何构造的?

春季版 3.2

4

3 回答 3

19

要连接从 Spring 属性占位符解析的值,您需要使用单个 quoutes ( '') 转义它们的值,并使用 SpEL 表达式包装占位符表达式#{}

<bean id="myService" class=""com.services.MyService">
  ...
  <property name="endpointAddress" value="#{'${server}' + ':' + '${port}' + '${endpoint}'}" />
</bean>

在哪里:

服务器 = http://domain.host.com

端口 = 7777

端点 = /services/myservice

结果将是:

http://domain.host.com:7777/services/myservice

于 2013-05-11T19:44:40.743 回答
3

我通过将PropertyPlaceholderConfigurerbean 更改为Properties. <util:properties/>可在 SpEL 中访问。

例子: "#{prop[host+'.'+'maxLength']}"

host字符串豆在哪里。

于 2013-04-03T09:50:37.240 回答
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 
于 2013-04-02T10:56:32.077 回答