背景:
原来的项目一直跑着没有问题,今天突然想在原有项目的基础上,加上redis进行数据的缓存,原来项目的架构就是传统的SSM框架,于是,大刀阔斧的开始改装了。。。
编写redis的配置文件——redis.properties。。。
编写redis的xml配置文件——redis-context.xml。。。
在spring的主配置文件(我的ssm项目本来只有这么一个xml配置文件)spring-mvc.xml引入刚刚编写redis-context.xml文件。。。
在数据层注入redis实例,进行数据缓存。。。
一切貌似挺简单,挺顺利,但是启动的时候就开始报错了,一直在报Could not resolve placeholder错误:
仔细观察了配置文件,确实有这个配置啊,而且也通过spring的context:property-placeholder标签引入的该配置文件:
但是就是报找不到这个属性,于是,去问问度娘吧,原来,spring容器只会维护一个PropertyPlaceholderConfigurer的bean实例,当spring发现容器中有一个该实例后,就会忽略其余的,所以,该标签只能配置一个,多余的spring会自动忽略。
问题知道了,那么怎么解决呢?
度娘的说法很简单,只需要在context:property-placeholder标签中添加一个属性ignore-unresolvable="true"即可!
事实证明,我想的太简单了,确实,这样的做法大部分情况下就解决了上述报的错误,只要在所有的context:property-placeholder标签上都加上ignore-unresolvable="true"属性就可以了,可是我翻遍了我的项目,确保所有的context:property-placeholder标签上都加上了这个属性,可是还是报上述的错误,耐着性子,继续找。。。
既然是配置文件方面报的错,那就把重点放在配置文件的读取上,于是我发现了数据库的配置文件,是这么读取的:
眼前是不是一亮,虽然不是context:property-placeholder标签,但它也是一个PropertyPlaceholderConfigurer实例,那就没跑了,肯定是你了,进去看一看,果然有这个属性:
果断的给它配置一个华丽丽的true:
再次启动,完美。。。可以开心的去写缓存了。。。