spring boot整合spring session
maven依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<!--排除默认的lettuce-->
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--引入Jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
相关配置
application.properties
server.port=8081
#reids
spring.redis.port=6379
spring.redis.host=localhost
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1
#spring session
spring.session.store-type=redis
config
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}
当我们使用@EnableRedisHttpSession注解后,Spring会创建一个叫做SpringSessionRepositoryFilter,这个过滤器的作用是用来把servelet中原有的Http Session替换成Spring Session,在此Spring Session时基于Redis来实现。
测试
测试代码
@RestController
public class SessionController {
@Value("${server.port}")
private Integer port;
@RequestMapping("set")
public String setSession(String name,HttpSession session) {
session.setAttribute("name",name);
return "在端口:"+port+",保存name:"+name;
}
@RequestMapping("get")
public String getSession(HttpSession session) {
Object name = session.getAttribute("name");
return "在端口:"+port+",获取name:"+name;
}
}
打包
使用maven将此项目分别打包为端口为8080,8081的两个jar包,然后运行,然后使用如下两个请求分别访问两个服务
http://localhost:8080/set?name=测试名
http://localhost:8080/get
通过测试发现两在不同容器的项目共用一个session。