美文网首页
2018-12-05 springboot 基于 spring-

2018-12-05 springboot 基于 spring-

作者: FredWorks | 来源:发表于2018-12-05 15:49 被阅读0次
  1. 安装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就安装完毕了。

  1. 在项目中配置使用 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的会话共享了。

  1. 增加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,都是相同的了。

相关文章

网友评论

      本文标题:2018-12-05 springboot 基于 spring-

      本文链接:https://www.haomeiwen.com/subject/pyhwcqtx.html