前言
session可以在一个中实现共享,如果是两个服务该怎么实现呢?我们这里借用redis数据库,本地通过多个端口,启动服务,模拟多个应用间共享session。
导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--全局session-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
application.yml配置redis
spring:
redis:
database: 2
host: 127.0.0.1
port: 6379
password:
ssl: false
jedis:
pool:
# 连接池最大连接数
max-active: 100
# 连接池最大阻塞时间
max-wait:
# 连接池中的最大空闲连接
max-idle: 8
# 连接池中的最小空闲连接
min-idle: 0
# 连接超时时间(毫秒)
timeout:
session:
store-type: redis
编写controller
@Slf4j
@RestController
public class TestController {
@RequestMapping("user/session")
public String session(HttpServletRequest request) {
String loginId = (String) request.getSession().getAttribute("loginId");
if (Objects.isNull(loginId)) {
log.info("session中 loginId不存在...");
request.getSession().setAttribute("loginId", "zhangsan");
}else {
log.info("session中 loginId = {}", loginId);
}
return loginId;
}
}
通过maven打包
执行package打包命令,生成xxx.jar
在target目录使用cmd在不同接口启动服务
java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8086
java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8087
执行服务看接口
http://localhost:8086/user/session
http://localhost:8087/user/session
在redis客户端中可以查到存的session id
有乱码是因为没有配置redis的解析格式。