2018-12-05 springboot 基于 spring-
2018-12-05 本文已影响0人
FredWorks
- 安装redis
首先,从docker仓库拉取redis的最新版本镜像:
$ docker pull redis
然后,在宿主机器的 /appdata/redis 创建 redis的数据目录,将在启动redis容器时使用。
接下来,启动redis容器:
$ docker run -d --name redis -p 6379:6379 -v /appdata/redis:/data redis
根据docker仓库上的镜像说明,redis在容器内,使用 /data 作为数据目录,使用端口 6379,且不使用持久化数据。
好了,现在redis就安装完毕了。
- 在项目中配置使用 spring-sesion和 redis作为会话共享方案。
首先,配置pom以来,让springboot支持redis,让spring-session支持redis:
<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>
上述两个依赖,缺一不可。
然后,配置springboot的application.properties,启用redis
#redis
spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.port=6379
server.session.timeout=36000
其中第一句配置非常重要,否则启动时spring-session会报找不到链接工厂的错误。
接下来,在代码中启用spring-session的javaconfig配置:
在javaconfig的配置类上,增加
@EnableRedisHttpSession
public class XxConfig {
...
好了,现在项目就已经支持redis的会话共享了。
- 增加web接口,用于显示当前会话ID,验证不同项目中是否已经共享会话了
在每个项目中增加如下web接口代码:
@Controller
@RequestMapping("/xxx/session")
public class SessionController {
@ResponseBody
@RequestMapping("/currentSession.do")
public String currentSession(
HttpServletRequest request) {
SingleResult<String> result = new SingleResult<>();
String sessionId = request.getSession().getId();
result.setData(sessionId);
result.setSuccess(true);
return result.toString();
}
}
根据个人项目特定,可以修改为rest风格接口,也可以修改为自己的url前缀,并增加相关权限配置等等。由于和本文章无关,就不在这个描述了。
现在,我们可以通过浏览器中输入url来显示当前会话ID了:
http://xxx:8080/xxx/session/currentSession.do
可以看到,完成了上述会话共享改造的项目,显示出来的会话ID,都是相同的了。