Spring Boot 技术探索

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

27、使用Redis实现Session共享

平台环境:

名称

版本号

Mac OS X

10.15.1

JDK

1.8.0_201

Apache Maven

3.6.0

IntelliJ IDEA

2019.2.4 (Ultimate Edition)

Spring Boot

2.1.10.RELEASE

Redis

stable 5.0.6 (bottled), HEAD

 

  Spring Session

  Spring Session 提供了一套创建和管理Servlet HttpSession的方案。Spring Session提供了集群 Session(Clustered Sessions)功能,默认采用外置的Redis来存储Session数据,以此来解决Session共享的问题。

  注意:Spring Session的核心项目并不依赖于Spring框架,因此,我们甚至能够将其应用于不使用 Spring 框架的项目中。

 

pom.xml中引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

 

application.properties中配置Redis

# REDIS
# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1
spring.redis.lettuce.shutdown-timeout=100
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0


# 应用访问端口
#server.port=9090

 

 

新建配置类SessionConfig

package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;


@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30) // 3600*24*30=30天
public class SessionConfig
{
}

maxInactiveIntervalInSeconds: 设置Session失效时间,使用Redis Session之后,原Spring Boot中的server.session.timeout属性不再生效。

 

到此配置完成


 

接下来写一个RestController类测试下

package com.example.demo.web;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;


@RestController
public class UserController
{
    @RequestMapping(value = "/setSession")
    public Map<String, Object> setSession(HttpServletRequest request)
    {
        Map<String, Object> map = new HashMap<>();
        request.getSession().setAttribute("message", request.getRequestURL());
        map.put("request Url", request.getRequestURL());
        return map;
    }


    @RequestMapping(value = "/getSession")
    public Object getSession(HttpServletRequest request)
    {
        Map<String, Object> map = new HashMap<>();
        map.put("sessionId", request.getSession().getId());
        map.put("message", request.getSession().getAttribute("message"));
        return map;
    }
}

 

启动工程,开始测试:

访问:http://localhost:8080/getSession

{"sessionId":"0e860b83-1785-49ce-bed5-aa61692e732a","message":null}

说明现在还没有session信息

 

访问:http://localhost:8080/setSession

{"request Url":"http://localhost:8080/setSession"}

保存session信息

 

访问:http://localhost:8080/getSession

{"sessionId":"0e860b83-1785-49ce-bed5-aa61692e732a","message":"http://localhost:8080/setSession"}

成功获取session信息

 

现在把整个工程项目复制一份,重命名为springBootDemo27-1

把新项目中的端口配置项的注释放开

# 应用访问端口
server.port=9090

 

打开“终端”

cd springBootDemo27-1目录下

 

执行打包命令

mvn clean package -Dmaven.test.skip=true

 

cd到target目录下,执行

java -jar demo-0.0.1-SNAPSHOT.jar

 

访问:http://localhost:9090/getSession

{"sessionId":"0e860b83-1785-49ce-bed5-aa61692e732a","message":"http://localhost:8080/setSession"}

说明新复制出来的springBootDemo27-1工程也获取到了session信息。

 

测试完毕

回到“终端”退出springBootDemo27-1工程

control+C

 

Bootstrap Thumbnail Second
MySQL

MySQL is the world's most popular open source database.

GO

Bootstrap Thumbnail Third
算法基础

本书介绍了什么是计算机算法,如何描述它们,以及如何来评估它们。

GO