zoukankan      html  css  js  c++  java
  • 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=foobared
    redis.host=127.0.0.1
    redis.port=6379
    redis.pass=
      
    redis.maxIdle=300
    redis.maxActive=600
    redis.maxWait=1000
    redis.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;
        }
        
    }
    View Code

    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();  
        }  
        
    }

    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>
     * -------------------------------------------------------------------------------
     *  
     * -------------------------------------------------------------------------------
     */
    
    @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);    
        }
        
    }
  • 相关阅读:
    读书笔记之理想设计的特征
    一些javascript 变量声明的 疑惑
    LINQ 使用方法
    Google MySQL tool releases
    读书笔记之设计的层次
    EF之数据库连接问题The specified named connection is either not found in the configuration, not intended to be used with the Ent
    转载 什么是闭包
    javascript面向对象起步
    Tips
    数据结构在游戏中的应用
  • 原文地址:https://www.cnblogs.com/chen-lhx/p/6113861.html
Copyright © 2011-2022 走看看