SSM(Simple Spring Memcached)--com\google\code\simple-spring-memcached\simple-spring-memcached\3.6.0\simple-spring-memcached-3.6.0.jar
其实我也只是用到了里面的一个CacheFactory,获取链接缓存的客户端com.google.code.ssm.Cache 中的incr自增方法
Maven中坐标:
<dependency> <groupId>com.google.code.simple-spring-memcached</groupId> <artifactId>xmemcached-provider</artifactId> </dependency> <!-- 用这个是因为上面的jar包依赖这个,其实单独用下面这个也是完全可以的 --> <dependency> <groupId>com.googlecode.xmemcached</groupId> <artifactId>xmemcached</artifactId> </dependency>
spring配置文件中的配置:
注意1:simplesm-context.xml 是simple-spring-memcached中的,所以你直接引用就好。
注意2:上图中的红色标记中的“2”“3”一定要加上去,不然下面就会报错误的。
注意3:xmlns:cache=...的命名空间记得在spring的主配置文件的头部加上去。
<!--spring主配置 有关缓存的关键配置-->
<import resource="classpath:simplesm-context.xml" />
<!-- 启用缓存注解 -->
<bean id="cacheManager" class="org.springframework.cache.concurrent.ConcurrentMapCacheManager" />
<cache:annotation-driven cache-manager="cacheManager"/>
<aop:aspectj-autoproxy />
<!-- simple-spring-memcache -->
<bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory">
<property name="cacheClientFactory">
<bean name="cacheClientFactory"
class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" />
</property>
<!-- 定义了缓存节点的IP地址和端口号 -->
<property name="addressProvider">
<bean class="com.google.code.ssm.config.DefaultAddressProvider">
<property name="address" value="${memcached.servers}" />
</bean>
</property>
<!-- 定义了缓存节点的查找方法 -->
<property name="configuration">
<bean class="com.google.code.ssm.providers.CacheConfiguration">
<property name="consistentHashing" value="true" />
</bean>
</property>
</bean>
memcached.properties配置:
#逗号隔开的是两个节点,他们只主备关系,一组主备与另一组主备 空格隔开,没有集群和主备单节点也是可以的 memcached.servers=X.X.X.X:11221,X1.X1.X1.X1:12221 A.A.A.A:11221,A1.A1.A1.A1:12221 memcached.connectionPoolSize=10 memcached.failureMode=true memcached.connectTimeout=1000 memcached.timeout=1000 memcached.exp=600 memcached.createOrder.exp=1800
使用:
举例:我是springMVC ,因为只是简单的用到incr自增的方法,做一个简单的逻辑,我就直接写在controller中了
//这个如果不写的话,项目启动的时候会报错,空指针,cacheBase无法注入到
defaultmemcachedClient,具体见错误2
@Autowired
private CacheBase cacheBase;
@Autowired
private CacheFactory defaultmemcachedClient;
*上面需要注意的是:
1:CacheBase也要注入
2:上面的一定要和配置文件中的保持你一致(cacheBase看的源码的,defaultmemcachedClient与上面的配置bean的name保持一致)
获取客户端对象操作memcached:
//根据key获取缓存中的值 Long counts=defaultmemcachedClient.getCache().getCounter("你自定义的KEY"); //自增 defaultmemcachedClient.getCache().incr(key, delta[自增幅度], 初始值, 有效期(s));
*说明:
1:getCounter可以获取incr(自增),或者decr(自减)的key的缓存的值
2:incr 的机制,根据key查缓存值,有的话,在现有的基础上加上增长服务,没有的话返回初始值,并将初始值存放到缓存中
写单元测试遇到的问题:
错误1:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.google.code.ssm.aop.CacheBase] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
应对措施:
1:在资源文件下放从源码包中的拉出来的文件:simplesm-context.xml
2:单元测试加载这个文件,如下
然后单元测试就不在报错了,但是当应用整个在tomcat服务器跑起来的时候,依然会报上面的错误,错误的原因是spring中主文件配置中的2,3没有写进去,无法初始化要使用的CacheBase,导致初始化的memcacehdClient报错。
上面的“2”“3”,加上去可以解决“错误1”,但是再次启动tomcat跑应用的时候,再次报错,具体错误如下
错误2:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'broadbandController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.google.code.ssm.CacheFactory com.chinatelecom.web.bss.controller.business.BroadbandController.defaultmemcachedClient; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultMemcachedClient': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.google.code.ssm.aop.CacheBase com.google.code.ssm.CacheFactory.cacheBase; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheBase' defined in class path resource [simplesm-context.xml]: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultMemcachedClient': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
应对这个错误,上上面代码注释上有说明,具体为什么还需要,进一步研究,后续补充.....
部分源码如下:
虽然解决了我使用的问题,但是还是有些不明白的地方,后续会对上面没说明白的地方进行补充.
~~~~~~~~纯个人项目遇到的问题总结,如能帮上您,我很开心,如有错误或者不严谨的地方,还望指教!~~~
相关推荐
毕业设计或课程设计是在高等教育阶段学生必须要完成的一项重要任务,它要求学生运用所学知识独立解决实际问题,通过设计项目来展示自己的专业能力和综合素养。本项目“ssm人才公寓管理系统”是使用java语言开发的...
综合以上知识点,"ssm演出道具租赁管理系统"是一个全面展示Java Web开发技能的实例,对于学习者来说,可以从中学习到如何运用SSM框架搭建项目,理解数据库设计,以及前后端交互等重要概念。同时,实际运行并调试该...
《基于SSM+JSP的健身管理系统》 ...总体而言,基于SSM+JSP的健身管理系统是一个综合运用多种Java技术的实践案例,对于学习和理解Java Web开发流程、SSM框架的运用以及实际项目开发经验的积累具有很高的参考价值。
学生可以通过研究和分析这个系统来加深对SSM框架、数据库设计、前端技术以及软件工程知识的理解。此外,学生可以在此基础上进行功能的扩展或优化,以此来完成他们的毕业设计、课程设计或期末大作业。 该项目的源码...
整个系统的实现过程中,不仅要求学生具备扎实的Java编程能力,还需要熟练掌握Web开发技术、数据库操作以及能够合理运用SSM框架解决实际问题。此外,论文还强调了系统安全性的重要性,指出在设计和实现过程中如何通过...
整个基于SSM的智乐健身后台项目不仅是对SSM框架综合运用的体现,更是对软件开发流程、团队协作、项目管理等软件工程知识的一次全面实践。通过该项目的开发,可以加深对Java Web开发的理解,提升解决实际问题的能力,...
在计算机系的毕业设计中,此类项目通常要求学生综合运用所学知识,结合实际需求进行软件开发实践。项目的设计与实现不仅考察学生的编程能力,还涉及需求分析、系统设计、数据库设计、前端和后端开发、测试等多方面...
在这类项目中,SSM框架的运用尤为关键。SSM指的是Spring、SpringMVC和MyBatis三个框架的整合。Spring是一个开源框架,用于简化企业级应用程序的开发;SpringMVC是Spring的一个模块,用于构建Web应用程序;MyBatis是...
在开发过程中,需要遵循软件工程的原则,进行需求分析、系统设计、编码实现、测试维护等步骤。 在毕业设计过程中,学生不仅需要将所学理论知识与实践相结合,还应该对系统进行详细的功能测试和性能评估,确保系统的...
在整个过程中,学生需要综合运用项目管理、团队协作、时间管理等软技能,这些都是未来步入社会参加工作所必需的重要能力。通过完成毕业设计项目,学生不仅能够积累宝贵的实践经验,还能够为自己的职业生涯打下坚实的...
基于SSM框架的宠物服务平台项目,不仅为宠物服务行业提供了一个信息化的解决方案,也为计算机相关专业的学生提供了一个学习和实践的平台,让他们能够在实际项目中锻炼技能,积累经验,为未来就业和职业发展做好准备...
在当今信息科技迅猛发展的背景下,软件开发团队管理网站的设计与实现成为了软件工程项目中不可或缺的一部分。随着软件开发项目的复杂性和团队规模的不断扩大,传统的项目管理方式已经无法满足现代软件开发的需求。...
在计算机科学与技术领域,毕业设计是一个重要的环节,它不仅能够帮助学生将理论知识与实践相结合,而且还能展示学生综合...通过这样的项目实践,学生能够更深刻地理解软件工程的全过程,并在实际操作中积累宝贵的经验。
通过实现这样的系统,学生能够更好地理解软件开发生命周期,掌握软件工程的方法论,并对SSM框架的运用有更深刻的理解。 此外,随着移动互联网技术的发展,未来的点餐系统可能会集成移动端应用,提供更灵活的使用...
对于计算机专业的学生而言,通过宠物小程序的开发可以综合运用所学知识,包括但不限于软件工程知识、编程知识、数据库知识和网络通信知识。这样的项目不仅能够锻炼学生的实操能力,还能够提高其解决实际问题的能力,...
毕业设计论文是学生在高校学习过程中的一次综合性实践,它要求学生综合运用所学知识,解决实际问题,并以论文的形式展现研究过程和成果。本项目中的论文应该详细介绍了系统的需求分析、设计思路、实现过程、测试结果...
赵XXX是一位专业的Java工程师,拥有丰富的技术和实践经验。他在2007年至2011年期间在三峡大学...通过这些项目,赵XXX积累了扎实的实战经验,能够在复杂的企业级项目中发挥作用,为公司的业务拓展和技术升级贡献力量。
本文将围绕“个人简历1”的内容,深入探讨...综上所述,苏老师具备全面的IT技能,尤其在Java后端开发、Web应用、数据库管理和算法设计方面有深厚的积累,且有丰富的项目经验和竞赛经历,是一名极具潜力的IT专业人士。
毕业设计是高等教育阶段学生在毕业前进行的一项重要实践,旨在综合运用所学知识解决实际问题。本系统作为毕业设计项目,不仅锻炼了学生的编程技能,还强化了他们对软件工程流程的理解,包括需求分析、系统设计、...
在技术可行性方面,开发人员掌握了Java核心知识和数据库技术,并通过系统学习获得了软件工程和软件测试的深入了解,具备了系统开发和检验的能力。在经济可行性方面,由于系统开发以个人独立设计为主,节省了大量经费...