这两天平台中集成redis和mongodb遇到一个问题
单独集成redis和单独集成mongodb时都可以正常启动程序,但是当两个同时集成进去时就会报以下问题
Could not resolve placeholder 'mongo.port' in string value "${mongo.port}
百思不得解后,经多方搜集查证,终于找到问题原因。
在spring的xml配置文件中当有多个*.properties文件需要加载时。
应该这样使用使用
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:mongodb.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean>
或者
<context:property-placeholder location="classpath*:redis.properties" ignore-unresolvable="true" />
但是 ignore-unresolvable="true" 和 <property name="ignoreUnresolvablePlaceholders" value="true" /> 这两个属性值必须为true
原因如下(摘自于文章最后的链接)
Spring容器采用反射扫描的发现机制,在探测到Spring容器中有一个org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的Bean就会停止对剩余PropertyPlaceholderConfigurer的扫描(Spring 3.1已经使用PropertySourcesPlaceholderConfigurer替代PropertyPlaceholderConfigurer了)。 而<context:property-placeholder/>这个基于命名空间的配置,其实内部就是创建一个PropertyPlaceholderConfigurer Bean而已。换句话说,即Spring容器仅允许最多定义一个PropertyPlaceholderConfigurer(或<context:property-placeholder/>),其余的会被Spring忽略掉(其实Spring如果提供一个警告就好了)。 |
原文章中提到最后是把所有的资源文件中的资源放在一起加载
如下:
#mongo的资源属性 mongo.host=192.168.111.230 mongo.port=40000 mongo.connectionsPerHost=8 mongo.threadsAllowedToBlockForConnectionMultiplier=4 mongo.connectTimeout=1500 mongo.maxWaitTime=1500 mongo.autoConnectRetry=true mongo.socketKeepAlive=true mongo.socketTimeout=1500 mongo.slaveOk=true mongo.write.number=1 mongo.write.timeout=0 mongo.write.fsync=true mongo.dbname=test #redis的资源属性 redis.host=192.168.111.225 redis.port=6379 redis.pass= redis.maxIdle=300 redis.maxTotal=600 redis.minIdle=100
但是本人认为这样加载不利于系统的拆分,耦合较高。因此本人推荐还是使用单独加载每个子系统自己的资源文件最好,如:
#mongo加载资源文件 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:mongodb.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean> #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>
只要保证ignoreUnresolvablePlaceholders都为true,或这最后一个加载的为false,之前的都为true即可。
参考地址:http://www.iteye.com/topic/1131688
相关推荐
SpringCloud整合Redis缓存;版本:SpringCloud :Dalston.SR4;SpringBoot:1.5.14.RELEASE;Redis:3.2.0;Maven :3.5.3.代码下载下来即可用
spring和redis集成有很多方式,看到网上很多都是使用redistemplate自己去做redis 的一些操作,但是对于我们开发来说,肯定是使用越方便越好,于是乎就有了spring的对redis或者memcahe这些换成框架的封装,只需要引入...
maven(jersey+redis+mongodb+spring)集成
spring mvc集成redis,集成了mybaties,集成了jdbc,欢迎学习下载
Spring集成redis集群
高级分布式数据库教程,nosql,mongodb,redis。非常好的分布式教程!
spring 使用MongoDB/redis使用示例,简单易懂
主要有三个模块,springcloud集成es,gateway,mongdodb, 通知有基于feign调用的整套代码注解说明 能帮助大家轻易打建springcloud基于nocos配置,注册中心的微服务架构 包含了远程共享私库 manven配置, nacos配置...
Spring mvc整合redis实例(redis连接池) 将所有jedis 增删改进行事务的封装、查询单独做为有返回参数的封装。简化了很多代码
整合了spring和redis相关jar,具体使用方法和代码请查看我的博客。
详细介绍了redis、mongodb、zookeeper、memcache的安装过程。文档包含redis、mongodb、zookeeper、memcache的下载地址、详细安装方法、安装所遇到的问题以及解决办法、数据库的使用等。
mysql、redis和MongoDB三大数据库的优点和区别
使用scrapy,redis,mongodb实现的一个分布式网络爬虫[整理].pdf
包含spring boot 、redis、mongodb、oauth2 client模式和password模式的安全框架
springboot+springmvc+mybatis+redis+mongodb整合
spring boot 集成redis代码
Spring + redis集群的集成 spring-data-redis-1.8.1.RELEASE.jar jedis-2.9.0.jar spring-data-commons-1.8.1.RELEASE.jar commons-pool2-2.4.2.jar
基于SpringBoot + Mybatis + Thymeleaf +Redis+MongoDB+MySQL开发的商品管理系统。基于SpringBoot + Mybatis + Thymeleaf +Redis+MongoDB+MySQL开发的商品管理系统。基于SpringBoot + Mybatis + Thymeleaf +Redis+...
springBoot+mybatis+redis集成,不上代码要确保redis服务端已经运行
mongodb+redis资源