首页 > 编程知识 正文

disruptor框架,springmvc入门实例

时间:2023-05-03 07:53:48 阅读:129527 作者:3075

SpringSession

官方文档:

3359 spring.io/projects/spring-session

一Spring Session简介

1. Spring Session概念:

Spring Session是Spring系列的子项目,Spring Session提供了用于管理用户会话信息的API和实现。

重点是用spring-session替换servlet容器实现的httpSession,并解决session管理问题。 会话信息存储在Redis中,可以轻松、快速、无缝地集成到APP应用程序中

2. Spring Session的特性:

使用Spring Session,可以轻松支持群集会话,而无需绑定到特定于APP应用程序容器的解决方案。 它还提供与以下内容的透明集成:

http会话-允许将http会话中立地替换为APP应用程序容器,即Tomcat。 也可以在标头中指定会话ID,以便与rest风格的API一起使用

web socket -提供在接收web socket消息时保持http会话处于活动状态的功能

可以将WebSession-springwebflux中的websession中立地替换为APP应用程序容器

3. Session会话共享方案

第一个是基于Tomcat的tomcat-redis-session-manager插件、基于Jetty的jetty-session-redis插件、memcached-session-manager插件它对项目是透明的,而不更改代码,但它过于依赖容器,这意味着如果容器被升级或更换,则需要重新配置

第二,使用Nginx负载平衡ip_hash策略,在每次用户访问时绑定到同一台特定的后台tomcat服务器,以确保session始终存在

第三,您可以自己编写Session会话管理工具类,所有需要使用会话的时候都可以从自己的工具类中获取。 工具类后端存储可以放入Redis中。 该方案具有很好的灵活性,但开发起来需要时间

四是使用框架的会话管理工具,本文使用的Spring session。 该方案独立于tomcat容器,无需更改代码,由Spring session框架提供,可以说是目前非常完善的session共享解决方案

4.spring-session分为以下核心模块:

essionrepositoryfilter :从http session切换到Spring Session,以及实现用于包装HttpServletRequest和HttpServletResponse的servlet规范的filter

httpserverletrequest/httpservletresponse/http session wrapper包装器:原始HttpServletRequest、http servlet response、Spring Session

会话: spring session模块

会话资料档案库:用于管理spring会话的模块

http会话策略:将http请求和HttpResponse映射到会话的策略

二.Spring Session示例

1.在idea中 新建两个 springboot 项目

springsession01和springsession02

2. 导入依赖

-父亲依赖的-

父代

artifactidspring-boot-starter-parent/artifact id

groupid org.spring framework.boot/groupid

版本2.3.1 .版本/版本

/parent

从属关系

从属关系

p>            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <!-- 引入 springboot&redis 整合场景 -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-redis</artifactId>

        </dependency>

        <!-- 引入 springboot&springsession 整合场景 -->

        <dependency>

            <groupId>org.springframework.session</groupId>

            <artifactId>spring-session-data-redis</artifactId>

        </dependency>

</dependencies>

      3. 分别写两个项目(springsession01 和 springsession02)的主启动类

     4.在springsession01 中 写 TestController  

      设置session

package com.crowd.controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

@RestController

public class TestController {

    @RequestMapping("/test/spring/session/save")

    public String testSession(HttpSession session){

        session.setAttribute("name","hjj");

        return "测试 session 共享";

    }

}

    5.在springsession02 中 获取session中的

@RestController

public class TestController {

@RequestMapping("/test/spring/session/retrieve")

public String testSession(HttpSession session){

        String name = (String) session.getAttribute("name");

        return name;

    }

}

   

     6. 配置 application.yml   

     springsession01中:

#redis 配置

spring:

  redis:

    host: 127.0.0.1

    jedis:

      pool:

        max-idle: 100

  session:

    store-type: redis   # springsession 配置   type= redis

     springsession02中:

#redis 配置

spring:

  

  redis:

    host: 127.0.0.1

    #redis连接池配置

    jedis:

      pool:

        max-idle: 100

  session:

    store-type: redis   # springsession 配置   type= redis

#

server:

  port: 8383

    7. 分别启动两个 项目 测试

http://localhost:8080/test/spring/session/save

http://localhost:8383/test/spring/session/retrieve

Windows+R  输入cmd  

在redis 中查找有没有 name

注意:

如果是Redis在linux 上面的 ,首先要开启虚拟机,开启Redis服务

还要修改 application.yml  中的

redis:

    host:  

如果 启动 报错

Exception in thread “main“ redis.clients.jedis.exceptions.JedisDataException

原因分析:

1)机器之间网络无法联通

2)ip和端口号不正确

3)虚拟机中防火墙的原因(可能性较大)

4)redis.conf 中bind 127.0.0.1 未用#注释掉

参考解决方案:

1,关闭linux防火墙

Centos6

查看防火墙状态: 

[root@centos6 ~]# service iptables status

iptables:未运行防火墙。

开启防火墙:

[root@centos6 ~]# service iptables start

关闭防火墙:

[root@centos6 ~]# service iptables stop

centos7

#查看防火墙状态:,注意firewall与-cmd之间无空格 

firewall-cmd  --state

#关闭防火墙

systemctl stop firewalld.service

#开启防火墙

systemctl start firewalld.service

#禁用防火墙

systemctl disable firewalld.service 

2,注释 redis.conf 配置文件中的  # bind 127.0.0.1,并将protected-mode设为no

修改redis.conf

      vim redis.conf

      2. 修改

     #bind 127.0.0.1

     protected-mode no


 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。