1. 程式人生 > >SpringMVC使用Redis

SpringMVC使用Redis

前置: 1.下載Redis,啟動Redis 2.使用idea內建Maven工具構建SpringMVC專案 參考連結:idea建立SpringMVC專案

本次目標:將物件序列化到Redis中,從Redis中取出。 先單元測試測試Service層,再啟動應用測試Controller層。

  • idea建立maven專案。pom檔案如下:
<?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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.neo</groupId> <artifactId>sis</artifactId> <version>1.0-SNAPSHOT</version> <packaging>
war</packaging> <name>sis Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.
compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.version>4.3.16.RELEASE</spring.version> <jedis-version>2.9.0</jedis-version> <spring-data-redis-version>1.8.4.RELEASE</spring-data-redis-version> <org.aspectj-version>1.8.5</org.aspectj-version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--redis--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis-version}</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>${spring-data-redis-version}</version> </dependency> <!--end of redis--> <!--spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring AOP --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj-version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${org.aspectj-version}</version> </dependency> <!--end of spring--> </dependencies> <build> <finalName>sis</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.0.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.20.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
  • 專案結構如下,補充maven未建立的package 在idea中,設定Project structure:java包位置,測試包位置,資源包位置等。 專案目錄

  • 配置applicationContext.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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <context:property-placeholder location="classpath:redis.properties"/>
    <context:component-scan base-package="com.neo.*">
        <context:exclude-filter type="custom" expression="com.neo.controller"></context:exclude-filter>
    </context:component-scan>

    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory"   ref="jedisConnFactory" />
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
        </property>
    </bean>

    <bean id="jedisConnFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
          p:host-name="${redis.host}"
          p:port="${redis.port}"
          p:poolConfig-ref="poolConfig"
          p:use-pool="true"/>

    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!--最大空閒連線數-->
        <property name="maxIdle" value="${redis.maxIdle}"></property>
        <property name="maxWaitMillis" value="${redis.maxWait}"></property>
        <property name="maxTotal" value="${redis.maxActive}"></property>
    </bean>
    <!--<import resource="classpath:/redis.xml"></import>-->
</beans>
  • 配置redis.properties
redis.host=127.0.0.1
#預設埠
redis.port=6379
redis.maxIdle=300
redis.maxActive=600
redis.maxWait=1000
redis.testOnBorrow=true
  • 配置dispatcher.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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.neo.controller"></context:component-scan>
</beans>
  • 建立User類
package com.neo.pojo;

import java.io.Serializable;

/**
 * @author:neo
 */
public class User implements Serializable {
    private String id;
    private String username;
    private String password;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString(){
        return "id:"+id + " username:"+username + " password:"+password;
    }
}

  • 建立接IUserService介面和實現類
package com.neo.service;

import com.neo.pojo.User;
import java.util.List;

public interface IUserService {
    User getUser(String id);
    String addUser(User user);
}
package com.neo.service.impl;

import com.neo.pojo.User;
import com.neo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    RedisTemplate<String,User> template;

    @Override
    public String addUser(User user){
        ValueOperations<String,User> valueOps =  template.opsForValue();
        valueOps.set(user.getId(),user);
        return "success";
    }

    @Override
    public User getUser(String id){
        ValueOperations<String,User> valueOps =  template.opsForValue();
        User user = valueOps.get(id);
        return user;
    }
}
  • 不啟動tomcat進行Service層的測試。 使用到spring-test,單純只啟動管Service的Spring容器,進行注入。
package com.neo.service;

import com.neo.base.BaseJunit4Test;
import com.neo.pojo.User;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.Jedis;
import java.io.*;

@RunWith(SpringJUnit4ClassRunner.class) //使用junit4進行測試
@ContextConfiguration(locations={"classpath:applicationContext.xml"}) //載入配置檔案
public class UserServiceTest extends BaseJunit4Test {

    @Autowired
    private IUserService userService;

    @Test
    public void testAdd() {
        User user = new User();
        user.setId("1");
        user.setUsername("neo");
        user.setPassword("psw");
        userService.addUser
            
           

相關推薦

no