springmvc整合redis

来源:互联网 发布:淘宝 贴吧 编辑:程序博客网 时间:2024/06/06 03:41

springmvc整合redis架构搭建实例

新换环境,又有新东西可以学习了,哈皮! 抽空学习之余看了一下redis,个人对Springmvc的爱是忠贞不渝,所以整理了一下Springmvc整合redis的环境搭建.分享学习.

第一步: 创建maven项目:

实例pom.xml内容如下

复制代码
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <packaging>war</packaging>    <name>orm-bae</name>    <groupId>com.orm</groupId>    <artifactId>orm-bae</artifactId>    <version>0.0.1-SNAPSHOT</version>        <properties>          <org.springframework.version>3.0.5.RELEASE</org.springframework.version>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>     </properties>          <dependencies>                <!-- config junit jar -->        <dependency>              <groupId>junit</groupId>              <artifactId>junit</artifactId>              <version>4.8.2</version>              <scope>test</scope>          </dependency>              <!-- config redis data and client jar-->         <dependency>              <groupId>org.springframework.data</groupId>              <artifactId>spring-data-redis</artifactId>              <version>1.0.2.RELEASE</version>          </dependency>              <dependency>              <groupId>redis.clients</groupId>              <artifactId>jedis</artifactId>              <version>2.1.0</version>          </dependency>                <!-- config need jar -->        <dependency>            <groupId>commons-lang</groupId>            <artifactId>commons-lang</artifactId>            <version>2.6</version>        </dependency>                <dependency>            <groupId>org.apache.geronimo.specs</groupId>            <artifactId>geronimo-servlet_3.0_spec</artifactId>            <version>1.0</version>        </dependency>        <!-- cofig spring jar -->        <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-core</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-expression</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-beans</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-aop</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-context</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-context-support</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-tx</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-jdbc</artifactId>              <version>${org.springframework.version}</version>          </dependency>          <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-orm</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-oxm</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-web</artifactId>              <version>${org.springframework.version}</version>          </dependency>          <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-webmvc</artifactId>              <version>${org.springframework.version}</version>          </dependency>                    <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-webmvc-portlet</artifactId>              <version>${org.springframework.version}</version>          </dependency>            <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-test</artifactId>              <version>${org.springframework.version}</version>              <scope>test</scope>          </dependency>        </dependencies>    <build>        <resources>            <resource>                <directory>/src/main/resources</directory>                <filtering>true</filtering>            </resource>        </resources>    </build></project>
复制代码

第二步:配置文件整合

Web.xml文件配置

复制代码
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4"         xmlns="http://java.sun.com/xml/ns/j2ee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>        <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/context/spring-context.xml</param-value>    </context-param>        <!-- Spring字符集过滤器 -->    <filter>        <filter-name>SpringEncodingFilter</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>UTF-8</param-value>        </init-param>        <init-param>            <param-name>forceEncoding</param-name>            <param-value>true</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>SpringEncodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>            <servlet>        <servlet-name>mvc</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>                 <param-name>contextConfigLocation</param-name>                 <param-value>/WEB-INF/context/spring-mvc.xml</param-value>         </init-param>         <load-on-startup>2</load-on-startup>    </servlet>        <servlet-mapping>        <servlet-name>mvc</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>    <welcome-file-list>        <welcome-file>index.jsp</welcome-file>    </welcome-file-list></web-app>
复制代码

spring-context.xml内容

复制代码
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"    xmlns:util="http://www.springframework.org/schema/util"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd              http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd                          http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">            <!-- 激活@Controller模式 -->    <mvc:annotation-driven />        <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 需要更改 -->    <context:component-scan base-package="com.pudp.bae.*" />        <!-- 引入同文件夹下的redis属性配置文件 -->    <import resource="redis-context.xml"/></beans>
复制代码

redis-context.xml内容

复制代码
<beans     xmlns="http://www.springframework.org/schema/beans"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xmlns:p="http://www.springframework.org/schema/p"            xmlns:tx="http://www.springframework.org/schema/tx"           xmlns:context="http://www.springframework.org/schema/context"           xsi:schemaLocation="            http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd            http://www.springframework.org/schema/tx             http://www.springframework.org/schema/tx/spring-tx-3.0.xsd            http://www.springframework.org/schema/context            http://www.springframework.org/schema/context/spring-context-3.0.xsd               ">        <!-- scanner redis properties  -->     <context:property-placeholder location="/WEB-INF/property/redis.properties" />        <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">          <property name="maxIdle" value="${redis.maxIdle}" />          <property name="maxActive" value="${redis.maxActive}" />          <property name="maxWait" value="${redis.maxWait}" />          <property name="testOnBorrow" value="${redis.testOnBorrow}" />      </bean>            <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"          p:host-name="${redis.host}"         p:port="${redis.port}"         p:password="${redis.pass}"          p:pool-config-ref="poolConfig"/>            <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">          <property name="connectionFactory"   ref="connectionFactory" />      </bean>           </beans>               
复制代码

Redis.properties文件内容

复制代码
# Redis settings#redis.host=192.168.20.101#redis.port=6380#redis.pass=foobaredredis.host=127.0.0.1redis.port=6379redis.pass=  redis.maxIdle=300redis.maxActive=600redis.maxWait=1000redis.testOnBorrow=true
复制代码

第三步:Springmvc对Redis的支持与实例应用.

实例对象

复制代码
package com.pudp.bae.model;import com.pudp.bae.base.BaseModel;public class Member extends BaseModel{    /**     *      */    private static final long serialVersionUID = -1959528436584592183L;            private String id;    private String nickname;        public Member(){}        public Member(String id, String nickname){        this.setId(id);        this.setNickname(nickname);    }        public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getNickname() {        return nickname;    }    public void setNickname(String nickname) {        this.nickname = nickname;    }    }
复制代码

Redis对象持久化操作

复制代码
package com.pudp.bae.base;import java.io.Serializable;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.RedisSerializer;public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {        @Autowired    protected RedisTemplate<K,V> redisTemplate ;    /**      * 设置redisTemplate      * @param redisTemplate the redisTemplate to set      */      public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {          this.redisTemplate = redisTemplate;      }            /**      * 获取 RedisSerializer      * <br>------------------------------<br>      */      protected RedisSerializer<String> getRedisSerializer() {          return redisTemplate.getStringSerializer();      }      }
复制代码
复制代码
package com.pudp.bae.base;import java.io.Serializable;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.RedisSerializer;public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {        @Autowired    protected RedisTemplate<K,V> redisTemplate ;    /**      * 设置redisTemplate      * @param redisTemplate the redisTemplate to set      */      public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {          this.redisTemplate = redisTemplate;      }            /**      * 获取 RedisSerializer      * <br>------------------------------<br>      */      protected RedisSerializer<String> getRedisSerializer() {          return redisTemplate.getStringSerializer();      }      }
复制代码

redis对象操作

复制代码
package com.pudp.bae.dao.redis;import java.util.ArrayList;import java.util.List;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.stereotype.Repository;import org.springframework.util.Assert;import com.pudp.bae.base.RedisGeneratorDao;import com.pudp.bae.model.Member;/** * 参看博客 <br> * ------------------------------------------------------------------------------- *  http://blog.csdn.net/java2000_wl/article/details/8543203 * ------------------------------------------------------------------------------- */@Repository(value="memberDao")public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{        /**     * 添加对象     */    @Override    public boolean add(final Member member) {          boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {              public Boolean doInRedis(RedisConnection connection)                      throws DataAccessException {                  RedisSerializer<String> serializer = getRedisSerializer();                  byte[] key  = serializer.serialize(member.getId());                  byte[] name = serializer.serialize(member.getNickname());                  return connection.setNX(key, name);              }          });          return result;      }      /**     * 添加集合     */    @Override    public boolean add(final List<Member> list) {        Assert.notEmpty(list);          boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {              public Boolean doInRedis(RedisConnection connection)                      throws DataAccessException {                  RedisSerializer<String> serializer = getRedisSerializer();                  for (Member member : list) {                      byte[] key  = serializer.serialize(member.getId());                      byte[] name = serializer.serialize(member.getNickname());                      connection.setNX(key, name);                  }                  return true;              }          }, false, true);          return result;     }          /**     * 删除对象 ,依赖key     */    public void delete(String key) {          List<String> list = new ArrayList<String>();          list.add(key);          delete(list);      }        /**     * 删除集合 ,依赖key集合     */    public void delete(List<String> keys) {          redisTemplate.delete(keys);      }          /**     * 修改对象      */    public boolean update(final Member member) {          String key = member.getId();          if (get(key) == null) {              throw new NullPointerException("数据行不存在, key = " + key);          }          boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {              public Boolean doInRedis(RedisConnection connection)                      throws DataAccessException {                  RedisSerializer<String> serializer = getRedisSerializer();                  byte[] key  = serializer.serialize(member.getId());                  byte[] name = serializer.serialize(member.getNickname());                  connection.set(key, name);                  return true;              }          });          return result;      }          /**     * 根据key获取对象     */    public Member get(final String keyId) {          Member result = redisTemplate.execute(new RedisCallback<Member>() {              public Member doInRedis(RedisConnection connection)                      throws DataAccessException {                  RedisSerializer<String> serializer = getRedisSerializer();                  byte[] key = serializer.serialize(keyId);                  byte[] value = connection.get(key);                  if (value == null) {                      return null;                  }                  String nickname = serializer.deserialize(value);                  return new Member(keyId, nickname);              }          });          return result;      }  }
复制代码
复制代码
package com.pudp.bae.dao.redis;import java.util.ArrayList;import java.util.List;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.stereotype.Repository;import org.springframework.util.Assert;import com.pudp.bae.base.RedisGeneratorDao;import com.pudp.bae.model.Member;/** * 参看博客 <br> * ------------------------------------------------------------------------------- *  http://blog.csdn.net/java2000_wl/article/details/8543203 * ------------------------------------------------------------------------------- */@Repository(value="memberDao")public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{        /**     * 添加对象     */    @Override    public boolean add(final Member member) {          boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {              public Boolean doInRedis(RedisConnection connection)                      throws DataAccessException {                  RedisSerializer<String> serializer = getRedisSerializer();                  byte[] key  = serializer.serialize(member.getId());                  byte[] name = serializer.serialize(member.getNickname());                  return connection.setNX(key, name);              }          });          return result;      }      /**     * 添加集合     */    @Override    public boolean add(final List<Member> list) {        Assert.notEmpty(list);          boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {              public Boolean doInRedis(RedisConnection connection)                      throws DataAccessException {                  RedisSerializer<String> serializer = getRedisSerializer();                  for (Member member : list) {                      byte[] key  = serializer.serialize(member.getId());                      byte[] name = serializer.serialize(member.getNickname());                      connection.setNX(key, name);                  }                  return true;              }          }, false, true);          return result;     }          /**     * 删除对象 ,依赖key     */    public void delete(String key) {          List<String> list = new ArrayList<String>();          list.add(key);          delete(list);      }        /**     * 删除集合 ,依赖key集合     */    public void delete(List<String> keys) {          redisTemplate.delete(keys);      }          /**     * 修改对象      */    public boolean update(final Member member) {          String key = member.getId();          if (get(key) == null) {              throw new NullPointerException("数据行不存在, key = " + key);          }          boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {              public Boolean doInRedis(RedisConnection connection)                      throws DataAccessException {                  RedisSerializer<String> serializer = getRedisSerializer();                  byte[] key  = serializer.serialize(member.getId());                  byte[] name = serializer.serialize(member.getNickname());                  connection.set(key, name);                  return true;              }          });          return result;      }          /**     * 根据key获取对象     */    public Member get(final String keyId) {          Member result = redisTemplate.execute(new RedisCallback<Member>() {              public Member doInRedis(RedisConnection connection)                      throws DataAccessException {                  RedisSerializer<String> serializer = getRedisSerializer();                  byte[] key = serializer.serialize(keyId);                  byte[] value = connection.get(key);                  if (value == null) {                      return null;                  }                  String nickname = serializer.deserialize(value);                  return new Member(keyId, nickname);              }          });          return result;      }  }
复制代码

Controller实现

复制代码
package com.pudp.bae.controller;import java.util.HashMap;import java.util.Map;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.ModelAndView;import com.pudp.bae.base.BaseMultiController;import com.pudp.bae.model.Member;import com.pudp.bae.service.MemberService;@Controller@RequestMapping(value="/member")public class MemberController extends BaseMultiController{    @Resource(name="memberService")    private MemberService memberService;        public void setMemberService(MemberService memberService) {        this.memberService = memberService;    }        @RequestMapping(value={"/add","/add.html"},method={RequestMethod.GET})    public ModelAndView add(HttpServletRequest request,HttpServletResponse response){        Map<String,Object> map = new HashMap<String, Object>();        return toView("member/add", map);    }        @RequestMapping(value={"/add","/add.html"},method={RequestMethod.POST})    public ModelAndView addMember(HttpServletRequest request,HttpServletResponse response,            @ModelAttribute("member")Member member){        Map<String,Object> map = new HashMap<String, Object>();        System.out.println(member);        map.put("message", "成功添加数据到库," + member);        this.memberService.add(member);        return toView("member/message", map);    }        @RequestMapping(value={"/{id:\\d+}/query","/{id:\\d+}/query.html"},method={RequestMethod.GET,RequestMethod.POST})    public ModelAndView queryMember(HttpServletRequest request,HttpServletResponse response,            @PathVariable("id")String id){        Map<String,Object> map = new HashMap<String, Object>();        System.out.println(id);        Member member = this.memberService.get(id);        if(null!=member){            map.put("message", "查询Id=" + id + "的用户名为:" + member.getNickname());        }else{            map.put("message", "没有查询到与Id=" + id + "相关的数据");        }        return toView("member/message", map);    }        @RequestMapping(value={"/{id:\\d+}/delete","/{id:\\d+}/delete.html"},method={RequestMethod.GET,RequestMethod.POST})    public ModelAndView deleteMember(HttpServletRequest request, HttpServletResponse response,            @PathVariable("id")String id){        Map<String,Object> map = new HashMap<String, Object>();        try {            this.memberService.delete(id);            map.put("message", "删除Id为" + id +"的用户成功.");        } catch (Exception e) {            e.printStackTrace();            map.put("message", "删除Id为" + id +"的用户失败, "+e.getMessage());        }        return toView("member/message", map);        }    }
复制代码


转载请注明出处:[http://www.cnblogs.com/dennisit/p/3614521.html]