发表于: 2017-02-14 23:51:23

1 1783


今天完成的事情:

SpringMVC-Mybatis中整合Memcached框架

明天计划的事情:

加上Memcache,在新建数据的时候同时维护好缓存(没有新建数据接口就自己加上,可以分成是压测JSPJson接口两种方式) ,确定数据没问题,重新压测服务器,测出90%的线在哪里.

遇到的问题:

1、在pom.xml文件中引用com.danga.java-memcached包不能识别

                                             

这是因为java memcached client没有官方的maven repository可供使用,因此使用时需要手动将其安装到本地repository。给Maven项目导入第三方jar包的办法:

  命令模板是:mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

之后报错:

网上搜了一下这个是因为2.6.6版本的java memcached client要依赖slf4j-simpleslf4j-apicommons-pool三个包这里缺少commons-pooljar包,在pom.xml添加:

但是,问题依然没有解决:

最后,找到的原因让人无语,memcacheproperties配置文件中,:

这段代码我是直接在网上粘贴过来的,server参数后面加了一句注释,问题就出在这句注解上了,这段代码在memcache-content.xml文件中引入时,把这句注释也引入了,造成无法识别,也不报错,解决方案就是把这句注释去除。

2、今天专门测试了引用com.danga:memcachedcom.whalin:memcached这两个包,我一开始也是为了图方便引用了com.whalin这个包,但是不能操作成功,

用单元测试:

但每次得到的都是null

后来改用com.danga之后,操作成功,然后我再次改回com.whalin后还是不行,配置应该是没错的,因为同样的配置用com.danga就可以,用com.whalin就得不到,不明白。

3memcached配置文件

这段构造方法不能省略。缺少这代也得不到数据。

4spring.xml文件中加上引入memcache配置的文件后,tomcat启动时,Spring容器报错

其实,这是Spring框架配置多个propertyConfigurer的问题,解决方案在收获中有详细说明

收获:

1,关于Spring框架配置多个propertyConfigurer的问题,一般我们在spring引用配置文件如jdbc.propertiesmemcache.properties时,有两种方式引入:

1)第一种用<context:property-placeholder/>

<context:property-placeholder/>这个基于命名空间的配置,其实内部就是创建一个PropertyPlaceholderConfigurer Bean而已。换句话说,即Spring容器仅允许最多定义一个PropertyPlaceholderConfigurer(<context:property-placeholder/>),其余的会被Spring忽略掉

2)第二种就是直接用PropertyPlaceholderConfigurer

而造成这个问题的原因,如果AB模块是单独运行的,由于Spring容器都只有一个PropertyPlaceholderConfigurer,因此属性文件会被正常加载并替换掉。如果AB两模块集成后运行,Spring容器中就有两个PropertyPlaceholderConfigurer Bean了,这时就看谁先谁后了, 先的保留,后的忽略!因此,只加载到了一个属性文件,因而造成无法正确进行属性替换的问题。

解决方案:把properties文件全部在一个PropertyPlaceholderConfigurer加载

在各个分配置中,不再配置PropertyPlaceholderConfigurer

网上还有另外一种配置的方法,在各个分配置中分别配置:

spring-mybatis.xml文件中:

memcached-content.xml文件中:

当然也可以用<context:property-placeholder/>

这种分别配置的需要注意几点:

1) spring运行时如果发现这个bean实现了Ordered,则按照顺序执行;默认无序;

2) order属性,则会反应出顺序,值越小优先级越高即越早执行,先扫描order='1' 的,如果没有扫描order='2'

3) 默认情况下ignore-unresolvable;即如果没找到的情况是否抛出异常。默认false:即抛出异常,所以要指定顺序,且只有最后一个ignore-unresolvable=false



返回列表 返回列表
评论

    分享到