springmvc+mybatis+redis综合配置

原文章https://blog.csdn.net/u010627840/article/details/50593659

最近在学习redis的使用方法,它的本地使用方法比较简单,只需要先启动Redis服务器,然后运行测试代码即可。但是现在我想要在网站上访问数据库的时候采用Redis缓存,问题就出来了。要么是缓存直接失效,每次都是直接访问数据库,要么就是出错。在网上看了很久发现一个靠谱的方法,和大家分享一下。

redis相关类是采用注解的形式,因此首先扫描注解类


 
 
  1. <!-- class annotation related... start -->
  2. <context:component-scan base-package="com.defonds.bdp.*.service" />
  3. <context:component-scan base-package="com.defonds.bdp.cache.redis" />
  4. <!-- class annotation related... end -->
  5. <context:annotation-config />

缓存工具类如下:


 
 
  1. /**
  2. * File Name:RedisCacheConfig.java
  3. *
  4. * Copyright Defonds Corporation 2015
  5. * All Rights Reserved
  6. *
  7. */
  8. package com.defonds.bdp.cache.redis;
  9. import org.springframework.cache.CacheManager;
  10. import org.springframework.cache.annotation.CachingConfigurerSupport;
  11. import org.springframework.cache.annotation.EnableCaching;
  12. import org.springframework.cache.interceptor.KeyGenerator;
  13. import org.springframework.context.annotation.Bean;
  14. import org.springframework.context.annotation.Configuration;
  15. import org.springframework.data.redis.cache.RedisCacheManager;
  16. import org.springframework.data.redis.connection.RedisConnectionFactory;
  17. import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  18. import org.springframework.data.redis.core.RedisTemplate;
  19. import java.lang.reflect.Method;
  20. /**
  21. *
  22. * Project Name:bdp
  23. * Type Name:RedisCacheConfig
  24. * Type Description:
  25. * Author:Defonds
  26. * Create Date:2015-09-21
  27. *
  28. * @version
  29. *
  30. */
  31. @Configuration
  32. @EnableCaching
  33. public class RedisCacheConfig extends CachingConfigurerSupport {
  34. @Bean
  35. public JedisConnectionFactory redisConnectionFactory() {
  36. JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
  37. // Defaults
  38. redisConnectionFactory.setHostName( "127.0.0.1");
  39. redisConnectionFactory.setPort( 6379);
  40. return redisConnectionFactory;
  41. }
  42. @Bean
  43. public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
  44. RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
  45. redisTemplate.setConnectionFactory(cf);
  46. return redisTemplate;
  47. }
  48. @Bean
  49. public CacheManager cacheManager(RedisTemplate redisTemplate) {
  50. RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
  51. // Number of seconds before expiration. Defaults to unlimited (0)
  52. cacheManager.setDefaultExpiration( 3000); // Sets the default expire time (in seconds)
  53. return cacheManager;
  54. }
  55. @Bean
  56. public KeyGenerator customKeyGenerator() {
  57. return new KeyGenerator() {
  58. public Object generate(Object o, Method method, Object... objects) {
  59. StringBuilder sb = new StringBuilder();
  60. sb.append(o.getClass().getName());
  61. sb.append(method.getName());
  62. for (Object obj : objects) {
  63. sb.append(obj.toString());
  64. }
  65. return sb.toString();
  66. }
  67. };
  68. }
  69. }

缓存的使用是在service层,在方法上使用注解,调用缓存


 
 
  1. /**
  2. * File Name:CityService.java
  3. *
  4. * Copyright Defonds Corporation 2015
  5. * All Rights Reserved
  6. *
  7. */
  8. package com.defonds.bdp.city.service;
  9. import java.util.List;
  10. import org.apache.commons.logging.Log;
  11. import org.apache.commons.logging.LogFactory;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.cache.annotation.CacheEvict;
  14. import org.springframework.cache.annotation.Cacheable;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.transaction.annotation.Propagation;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import com.defonds.bdp.city.bean.City;
  19. import com.defonds.bdp.city.mapper.CityMapper;
  20. /**
  21. *
  22. * Project Name:bdp
  23. * Type Name:CityService
  24. * Type Description:
  25. * Author:Defonds
  26. * Create Date:2015-08-31
  27. * @version
  28. *
  29. */
  30. @Service
  31. @Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
  32. public class CityService {
  33. private final Log logger = LogFactory.getLog( this.getClass());
  34. @Autowired
  35. private CityMapper cityMapper;
  36. // C
  37. @CacheEvict(value = { "provinceCities"}, allEntries = true)
  38. public void insertCity(String city_code, String city_jb,
  39. String province_code, String city_name,
  40. String city, String province) {
  41. City cityBean = new City();
  42. cityBean.setCityCode(city_code);
  43. cityBean.setCityJb(city_jb);
  44. cityBean.setProvinceCode(province_code);
  45. cityBean.setCityName(city_name);
  46. cityBean.setCity(city);
  47. cityBean.setProvince(province);
  48. this.cityMapper.insertCity(cityBean);
  49. }
  50. // R
  51. @Cacheable( "provinceCities")
  52. public List<City> provinceCities(String province) {
  53. logger.debug( "province=" + province);
  54. return this.cityMapper.provinceCities(province);
  55. }
  56. // R
  57. @Cacheable( "searchCity")
  58. public City searchCity(String city_code){
  59. logger.debug( "city_code=" + city_code);
  60. return this.cityMapper.searchCity(city_code);
  61. }
  62. // U
  63. @CacheEvict(value = { "provinceCities", "searchCity" }, allEntries = true)
  64. public int renameCity(String city_code, String city_name) {
  65. City city = new City();
  66. city.setCityCode(city_code);
  67. city.setCityName(city_name);
  68. this.cityMapper.renameCity(city);
  69. return 1;
  70. }
  71. // D
  72. @CacheEvict(value = { "provinceCities", "searchCity" }, allEntries = true)
  73. public int deleteCity(String city_code) {
  74. this.cityMapper.deleteCity(city_code);
  75. return 1;
  76. }
  77. }


maven项目,增加redis的jar包


 
 
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0 </modelVersion>
  4. <groupId>com </groupId>
  5. <artifactId>redisdemo01 </artifactId>
  6. <packaging>war </packaging>
  7. <version>0.0.1-SNAPSHOT </version>
  8. <name>redisdemo01 Maven Webapp </name>
  9. <url>http://maven.apache.org </url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8 </project.build.sourceEncoding>
  12. <spring.version>4.1.4.RELEASE </spring.version>
  13. <jackson.version>2.5.0 </jackson.version>
  14. </properties>
  15. <dependencies>
  16. <dependency>
  17. <groupId>junit </groupId>
  18. <artifactId>junit </artifactId>
  19. <version>4.12 </version>
  20. <scope>test </scope>
  21. </dependency>
  22. <!-- spring -->
  23. <dependency>
  24. <groupId>org.springframework </groupId>
  25. <artifactId>spring-core </artifactId>
  26. <version>${spring.version} </version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework </groupId>
  30. <artifactId>spring-beans </artifactId>
  31. <version>${spring.version} </version>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework </groupId>
  35. <artifactId>spring-context </artifactId>
  36. <version>${spring.version} </version>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework </groupId>
  40. <artifactId>spring-tx </artifactId>
  41. <version>${spring.version} </version>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.springframework </groupId>
  45. <artifactId>spring-web </artifactId>
  46. <version>${spring.version} </version>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.springframework </groupId>
  50. <artifactId>spring-webmvc </artifactId>
  51. <version>${spring.version} </version>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.springframework </groupId>
  55. <artifactId>spring-jdbc </artifactId>
  56. <version>${spring.version} </version>
  57. </dependency>
  58. <dependency>
  59. <groupId>org.springframework </groupId>
  60. <artifactId>spring-test </artifactId>
  61. <version>${spring.version} </version>
  62. <scope>test </scope>
  63. </dependency>
  64. <!-- mybatis 包 -->
  65. <dependency>
  66. <groupId>org.mybatis </groupId>
  67. <artifactId>mybatis </artifactId>
  68. <version>3.2.8 </version>
  69. </dependency>
  70. <!--mybatis spring 插件 -->
  71. <dependency>
  72. <groupId>org.mybatis </groupId>
  73. <artifactId>mybatis-spring </artifactId>
  74. <version>1.2.2 </version>
  75. </dependency>
  76. <!-- mysql连接 -->
  77. <dependency>
  78. <groupId>mysql </groupId>
  79. <artifactId>mysql-connector-java </artifactId>
  80. <version>5.1.34 </version>
  81. </dependency>
  82. <!-- 数据源 -->
  83. <dependency>
  84. <groupId>com.alibaba </groupId>
  85. <artifactId>druid </artifactId>
  86. <version>1.0.12 </version>
  87. </dependency>
  88. <dependency>
  89. <groupId>c3p0 </groupId>
  90. <artifactId>c3p0 </artifactId>
  91. <version>0.9.1.2 </version>
  92. </dependency>
  93. <dependency>
  94. <groupId>org.aspectj </groupId>
  95. <artifactId>aspectjweaver </artifactId>
  96. <version>1.8.4 </version>
  97. </dependency>
  98. <!-- log4j -->
  99. <dependency>
  100. <groupId>log4j </groupId>
  101. <artifactId>log4j </artifactId>
  102. <version>1.2.17 </version>
  103. </dependency>
  104. <!-- servlet -->
  105. <dependency>
  106. <groupId>javax.servlet </groupId>
  107. <artifactId>servlet-api </artifactId>
  108. <version>3.0-alpha-1 </version>
  109. </dependency>
  110. <dependency>
  111. <groupId>javax.servlet </groupId>
  112. <artifactId>jstl </artifactId>
  113. <version>1.2 </version>
  114. </dependency>
  115. <!-- json -->
  116. <dependency>
  117. <groupId>org.codehaus.jackson </groupId>
  118. <artifactId>jackson-mapper-asl </artifactId>
  119. <version>1.9.13 </version>
  120. </dependency>
  121. <dependency>
  122. <groupId>com.alibaba </groupId>
  123. <artifactId>fastjson </artifactId>
  124. <version>1.2.3 </version>
  125. </dependency>
  126. <dependency>
  127. <groupId>com.fasterxml.jackson.core </groupId>
  128. <artifactId>jackson-annotations </artifactId>
  129. <version>${jackson.version} </version>
  130. </dependency>
  131. <dependency>
  132. <groupId>com.fasterxml.jackson.core </groupId>
  133. <artifactId>jackson-core </artifactId>
  134. <version>${jackson.version} </version>
  135. </dependency>
  136. <dependency>
  137. <groupId>com.fasterxml.jackson.core </groupId>
  138. <artifactId>jackson-databind </artifactId>
  139. <version>${jackson.version} </version>
  140. </dependency>
  141. <!-- 文件上传 -->
  142. <dependency>
  143. <groupId>commons-io </groupId>
  144. <artifactId>commons-io </artifactId>
  145. <version>2.4 </version>
  146. </dependency>
  147. <dependency>
  148. <groupId>commons-fileupload </groupId>
  149. <artifactId>commons-fileupload </artifactId>
  150. <version>1.2.2 </version>
  151. </dependency>
  152. <!-- 队列 -->
  153. <dependency>
  154. <groupId>com.rabbitmq </groupId>
  155. <artifactId>amqp-client </artifactId>
  156. <version>3.4.1 </version>
  157. </dependency>
  158. <dependency>
  159. <groupId>org.slf4j </groupId>
  160. <artifactId>slf4j-log4j12 </artifactId>
  161. <version>1.7.7 </version>
  162. </dependency>
  163. <dependency>
  164. <groupId>org.apache.commons </groupId>
  165. <artifactId>commons-lang3 </artifactId>
  166. <version>3.3.2 </version>
  167. </dependency>
  168. <dependency>
  169. <groupId>org.springframework.amqp </groupId>
  170. <artifactId>spring-rabbit </artifactId>
  171. <version>1.4.0.RELEASE </version>
  172. </dependency>
  173. <!-- 缓存 -->
  174. <dependency>
  175. <groupId>redis.clients </groupId>
  176. <artifactId>jedis </artifactId>
  177. <version>2.6.0 </version>
  178. </dependency>
  179. <dependency>
  180. <groupId>org.springframework.data </groupId>
  181. <artifactId>spring-data-redis </artifactId>
  182. <version>1.6.0.RELEASE </version>
  183. </dependency>
  184. </dependencies>
  185. <build>
  186. <finalName>redisdemo01 </finalName>
  187. </build>
  188. </project>

web.xml不变


 
 
  1. <!DOCTYPE web-app PUBLIC
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  4. <web-app>
  5. <display-name>Archetype Created Web Application</display-name>
  6. <filter>
  7. <filter-name>encodingFilter</filter-name>
  8. <filter- class>
  9. org.springframework.web.filter.CharacterEncodingFilter
  10. </filter-class>
  11. <init-param>
  12. <param-name>encoding</param-name>
  13. <param-value>UTF-8</param-value>
  14. </init-param>
  15. <init-param>
  16. <param-name>forceEncoding</param-name>
  17. <param-value>true</param-value>
  18. </init-param>
  19. </filter>
  20. <filter-mapping>
  21. <filter-name>encodingFilter</filter-name>
  22. <url-pattern>/*</url-pattern>
  23. </filter-mapping>
  24. <!-- 除了加过滤器,由于tomcat默认编码ISO-8859-1,还需要修改 %tomcat%/conf/server.xml Connector 标签加属性 URIEncoding= "UTF-8" -->
  25. <!-- character encoding related.....end -->
  26. <context-param>
  27. <param-name>contextConfigLocation</param-name>
  28. <param-value>/WEB-INF/classes /*-applicationContext.xml</param-value>
  29. </context-param>
  30. <listener>
  31. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  32. </listener>
  33. <servlet>
  34. <servlet-name>bdpmvc</servlet-name>
  35. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  36. <init-param>
  37. <param-name>contextConfigLocation</param-name>
  38. <param-value>/WEB-INF/classes/*-servlet.xml</param-value>
  39. </init-param>
  40. <load-on-startup>1</load-on-startup>
  41. </servlet>
  42. <servlet-mapping>
  43. <servlet-name>bdpmvc</servlet-name>
  44. <url-pattern>/</url-pattern>
  45. <!-- <url-pattern>*.json</url-pattern>
  46. <url-pattern>*.html</url-pattern> -->
  47. </servlet-mapping>
  48. </web-app>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值