多模块的项目中,不建议直接在@Value
中初始化默认值,各个模块的properties
配置文件建议使用PropertyPlaceholderConfigurer
加载,或者在主模块中定义一个PropertySourcesPlaceholderConfigurer
,加载你需要的所有模块中的properties
属性。
-
使用
PropertyPlaceholderConfigurer
配置:主模块引入先引入
<import resource="classpath:spring/spring-api-log.xml"/>
后引入<import resource="classpath:spring/spring-shiro-client.xml"/>
,内容分别如下spring-api-log.xml内容: <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:api-access-log.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean> spring-shiro-client.xml内容: <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:shiro-client.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean>
代码如下:
@Value("${api.access.log.prefix:com.commons}") private String logPrefix; @Value("${shiro.platform:2}") private String shiroPlatform;
两个属性都给了默认值,由于先引入的是
spring-api-log.xml
,因此logPrefix
的值会引用加载的api-access-log.properties
配置文件中的值,而shiroPlatform
使用默认值2
,并不会加载shiro-client.properties
配置文件中的值。如果两个属性都没有默认值,两个属性都会初始化为配置文件中的值。 -
使用
propertySourcesPlaceholderConfigurer
配置:引入多个模块的配置文件时,只会加载第一个配置文件中配置的properties
主模块引入先引入
<import resource="classpath:spring/spring-api-log.xml"/>
后引入<import resource="classpath:spring/spring-shiro-client.xml"/>
,内容如上,但是bean
的class
换成<bean id="propertySourcesPlaceholderConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"></bean>
无论两个属性有没有默认值,由于后引入的是
spring-shiro-client.xml
,因此shiroPlatform
的值都会从shiro-client.properties
配置文件获取,而logPrefix
无论如何都不会从api-access-log.properties
配置文件中读取