最近在出些关于SSM环境搭建的教程,在我们搭建SSM架构,一般都无法避免需要加载多个xxxx.properties配置文件。
也许很多人不注意,就会出现类似以下的错误:
Could not resolve placeholder 'redis.maxIdle' in string value "${redis.maxIdle}"; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'redis.maxIdle' in string value "${redis.maxIdle}"
这种是什么情况,就是因为加载的配置文件项 读取不了值;
为什么读取不了值,因为spring扫描加载的时候只读取了一份xxxx.properties配置文件,所以在后面配置加载的xxxx.properties配置文件上面的值基本都拿不到了。
这种情况,需要这么设置:
情景: 现在我需要加载jdbc.properties配置文件和 redis.properties配置文件。
那么在配置加载jdbc.properties的时候,加上ignoreUnresolvablePlaceholders ,设置为true,如下:
<!--数据库配置 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:jdbc.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean>
然后在配置加载 redis.properties的时候,也一样加上,如下:
<!--引入Redis配置文件--> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:redis.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean>
这样,就解决了加载多个配置文件的问题了。
PS:关于ignoreUnresolvablePlaceholders设置,其实如果你仅仅需要加载2份 properties配置文件,那么你第一份设置true,第二份设置false或者ture都可以。 直白点,你最后一份可以设置为false,但是我建议直接全部设置true。
其实如果你不想管那么多,把全部配置文件的项都放在一个config.properties里面也是可以的,不过我不推荐这样,这样不够优雅,我们编码需要优雅。
OK,到此。