在春季4.1.2.RELEASE中,我们在web.xml中有2个活动配置文件
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>Production,Customer1</param-value>
</context-param>
我们想要动态加载一些属性文件,如下所示:
<util:properties id="accountPolicy"
location="classpath:/configs/${spring.profiles.active}/sample.properties" />
${spring.profiles.active}
无效,可能是因为有两个配置文件,我尝试了一些查找:${spring.profiles.active[1]}
但没有运气!
任何评论
更新:
${spring.profiles.active}
似乎是我在下面尝试的逗号分隔列表:
<util:properties id="signConditions"
location="classpath:/configs/#{ {'${spring.profiles.active}'.split(',')}.get(1) }/sample.properties" />
但是错误似乎会出现XML解析器错误:
org.springframework.expression.ParseException:
Expression 'classpath:/configs/#{ {'Production,Customer1'.split('' @ 19: No ending suffix '}' for expression starting at character 19: #{ {'Production,Customer1'.split('
答案 0 :(得分:1)
我认为更合适的方法是做一些事情:
<beans profile="Production">
<!-- some other stuff for Production profile -->
</beans>
<beans profile="Customer1">
<util:properties id="accountPolicy"
location="classpath:/configs/Customer1/sample.properties" />
<!-- some other stuff for Customer1 profile -->
</bean>
配置文件应该用作应用程序上下文中配置的配置文件,而不是像替换属性(就像你正在做的那样)
根据我的评论编辑:
您正在寻找的不是Spring配置文件功能的正确用例(至少现在不是这样)。您要做的是在系统属性上拥有属性占位符工作原理。但是,可以通过其他方式激活配置文件。这意味着,您可以打开没有spring.profiles.active
系统属性的配置文件。你在做什么并不可靠。
如果传递系统属性没问题,为什么不这样做:
Customer
的个人资料,表示会向客户部署涉及帐户政策(以及其他内容)通过这样做,您需要做的是
<beans profile="Production">
<!-- some other stuff for Production profile -->
</beans>
<beans profile="Customer">
<util:properties id="accountPolicy"
location="classpath:/configs/${customerCode}/sample.properties" />
<!-- some other stuff for Customer1 profile -->
</bean>
以及应用程序所需的系统属性应如下所示:-Dspring.profiles.active="Production,Customer" -DcustomerCode=Customer1
然后您正确使用了个人资料,无需为每个客户复制accountPolicy
。
答案 1 :(得分:1)
这完成了工作:
<util:properties id="signConditions"
location="classpath:/configs/#{environment.getActiveProfiles()[1]}/sample.properties" />