POM文件

      <!-- 数据库session管理 --><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-jdbc</artifactId></dependency>

4.3. 使用JDBC的HttpSession

在使用HttpSession的任何功能之前通过添加一个Servlet过滤器,就可以启用Spring Session,可以通过如下几种方式进行启用:

  1. 基于Java的配置
  2. 基于XML的配置
  3. 基于Spring Boot的配置

4.3.1. 基于Java配置JDBC

本节介绍基于Java配置的方式如何使用关系型数据库支持HttpSession。

HttpSession JDBC样例提供了一个可执行的样例,这个样例提供了如何基于Java配置整合Spring Session和HttpSession。你可以阅读以下的一些基础步骤,但是当您与自己的应用程序整合时,推荐遵循详细的HttpSession JDBC参考指南。

Spring Java配置

在添加完成必要的依赖之后,我们就可以创建我们自己的配置。Spring配置负责创建一个Servlet过滤器,这个过滤器通过一个使用Spring Session支持的实现去替换HttpSession。添加如下的Spring配置:

@EnableJdbcHttpSession
public class Config {@Beanpublic EmbeddedDatabase dataSource() {return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2).addScript("org/springframework/session/jdbc/schema-h2.sql").build();}@Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource) {return new DataSourceTransactionManager(dataSource); }
}
  1. @EnableJdbcHttpSession 注解创建了一个实现了Filter的名为springSessionRepositoryFilter的Bean。过滤器负责使用Spring Session支持的一个实现去替换HttpSession,这个实例中Spring Session由关系型数据库支持。
  2. 我们创建一个dataSource链接Spring Session和一个被嵌入的H2数据库实例。我们配置H2数据库使用包含在Spring Session中的SQL脚本创建一张数据表。
  3. 我们创建一个transactionManager去管理前面所创建的数据库的事务。

对于如何配置数据访问的一些相关概念的附加信息,请参考Spring Framework参考文档

Java Servlet容器初始化

我们的Spring配置文件已经创建了一个实现了Filter的名为springSessionRepositoryFilterBean。springSessionRepositoryFilter负责使用一个支持Spring Session的实现替换HttpSession。

为了让我们的Filter发挥它的魔力,Spring需要加载我们的Config类。最后我们需要确保每次请求Servlet容器都使用了springSessionRepositoryFilter。幸运的是,Spring Session提供了一个很有效的名为AbstractHttpSessionApplicationInitializer的类,使用这个类可以让加载Config类变得非常的容易。例子如下:

public class Initializer extends AbstractHttpSessionApplicationInitializer { public Initializer() {super(Config.class); }
}

我们自己的类(Initializer )的命名我们并不关心,最重要的是要继承AbstractHttpSessionApplicationInitializer。

  1. 第一步是需要继承AbstractHttpSessionApplicationInitializer。这样可以确保名为springSessionRepositoryFilter 的Spring Bean被注册到Servlet容器中并为每次请求提供处理。
  2. AbstractHttpSessionApplicationInitializer也提供了一种机制可以非常容易的确保Spring加载Config。

4.3.2. 基于XML配置JDBC

本节介绍基于XML配置的方式如何使用关系型数据库支持HttpSession。

HttpSession JDBC XML样例提供了一个可执行的样例,这个样例提供了如何基于XML配置整合Spring Session和HttpSession。你可以阅读以下的一些基础步骤,但是当您与自己的应用程序整合时,推荐遵循详细的HttpSession JDBC XML参考指南。

Spring XML配置

添加必要的依赖之后,我们需要创建我们自己的Spring配置。Spring配置主要负责创建一个Spring Session支持的实现去替换HttpSession。Spring配置添加如下:

<context:annotation-config/>
<bean class="org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration"/><jdbc:embedded-database id="dataSource" database-name="testdb" type="H2"><jdbc:script location="classpath:org/springframework/session/jdbc/schema-h2.sql"/>
</jdbc:embedded-database><bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><constructor-arg ref="dataSource"/>
</bean>
  1. 我们使用context:annotation-config和JdbcHttpSessionConfiguration主要是因为Spring Session没有提供XML命名空间的支持。这就创建了一个实现了Filter的名为springSessionRepositoryFilter 的SpringBean。此过滤器负责使用Spring Session支持的一个实现去替换HttpSession,这个实例中Spring Session由关系型数据库支持。
  2. 我们创建了一个dataSource用于连接Spring Session和一个嵌入的H2数据库实例。我们配置H2数据库使用包含在Spring Session中的SQL脚本创建一张数据表。
  3. 我们创建一个transactionManager去管理前面所创建的数据库的事务。

对于如何配置数据访问的一些相关概念的附加信息,请参考Spring Framework参考文档

XML Servlet容器初始化

Spring配置文件创建了一个实现Filter的名为springSessionRepositoryFilter的Bean。springSessionRepositoryFilter负责使用一个支持Spring Session的个性化实现替换HttpSession。

为了让我们的Filter发挥它的魔力,我们需要指示Spring加载我们的session.xml配置文件,我们按照如下配置指示Spring加载session.xml配置文件。

src/main/webapp/WEB-INF/web.xml(配置文件路径)
<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring/*.xml</param-value>
</context-param>
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

ContextLoaderListener读contextConfigLocation并抽出session.xml配置内容。

最后我们需要确保Servlet容器(如Tomcat)的每个请求都使用了springSessionRepositoryFilter,下面的这个代码片段为我们执行了最后一步:

src/main/webapp/WEB-INF/web.xml(配置文件路径)
<filter><filter-name>springSessionRepositoryFilter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping><filter-name>springSessionRepositoryFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>ERROR</dispatcher>
</filter-mapping>

DelegatingFilterProxy会根据名称springSessionRepositoryFilter去寻找Bean并将其转化成Filter。对于调用DelegatingFilterProxy的每各请求,将调用springSessionRepositoryFilter。

4.3.3. 基于Spring Boot配置JDBC

本节主要介绍在使用Spring Boot的时候如何使用关系型数据库去支持HttpSession。

HttpSession JDBC Spring Boot样例提供了一个可执行的样例,这个样例提供了在使用Spring Boot的时候如何整合Spring Session和HttpSession。你可以阅读以下的一些基础步骤,但是当您与自己的应用程序整合时,推荐遵循详细的HttpSession JDBC Spring Boot参考指南。

Spring Boot配置

在添加完成一些必要的依赖之后,我们需要创建我们自己的Spring Boot配置文件。这里需要感谢first-class自动配置的支持,设置关系型数据库支持Spring Session是非常简单的,简单到只需要在你的application.properties配置文件中添加一条配置信息。

src/main/resources/application.properties(配置文件路径)
spring.session.store-type=jdbc

在以上配置的引导之下,Spring Boot将会应用相当于手动添加@EnableJdbcHttpSession注解的配置。创建一个实现了Filter的名为springSessionRepositoryFilter的Bean(过滤器)。这个过滤器负责使用Spring Session支持的实现去替换HttpSession。

使用application.properties还可以进行更进一步的个性化。

server.session.timeout= # Session超时时间(秒)
spring.session.jdbc.initializer.enabled= #  如果有需要,在启动时可创建必要的Session表。如果默认的表名已经配置或者个性化模式中已经配置,则自动启动。
spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-@@platform@@.sql # 初始化数据库schema的SQL脚本目录。
spring.session.jdbc.table-name=SPRING_SESSION # 用于存储会话的数据库表名。

更多信息,请参考Spring Boot参考文档的Spring Session部分。

配置DataSource

Spring Boot会自动创建DataSource 连接Spring Session和嵌入的H2数据库实例。在生产环境中,你需要确保更新你的配置到你的关系型数据库中。例如,你需要在application.properties包含下列内容:

spring.datasource.url=jdbc:postgresql://localhost:5432/myapp
spring.datasource.username=myapp
spring.datasource.password=secret

mysql建表代码

CREATE TABLE SPRING_SESSION (PRIMARY_ID CHAR(36) NOT NULL,SESSION_ID CHAR(36) NOT NULL,CREATION_TIME BIGINT NOT NULL,LAST_ACCESS_TIME BIGINT NOT NULL,MAX_INACTIVE_INTERVAL INT NOT NULL,EXPIRY_TIME BIGINT NOT NULL,PRINCIPAL_NAME VARCHAR(100),CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);
CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);
CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);CREATE TABLE SPRING_SESSION_ATTRIBUTES (SESSION_PRIMARY_ID CHAR(36) NOT NULL,ATTRIBUTE_NAME VARCHAR(200) NOT NULL,ATTRIBUTE_BYTES BLOB NOT NULL,CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

附上Spingboot官方文档

官方链接https://docs.spring.io/spring-session/docs/2.1.0.M2/reference/html5/#httpsession-jdbc

springboot 2.X jdbc 实现session共享mysql相关推荐

  1. SpringBoot一个依赖搞定Session共享,没有比这更简单的方案了!

    作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 上一篇:推荐10个你不得不关注的NB技术公众号 有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你 ...

  2. Springboot整合springsession实现session共享

    Springboot整合springsession实现session共享 简介 session我们之前有介绍过(可见springboot整合springsecurity),简单来说就是将用户信息或者数 ...

  3. nginx session共享_Centos下实现nginx负载均衡

    一.基本思路 网络拓扑图 1.利用nginx实现负载均衡和反向代理,减轻主服务器访问压力: 2.利用springboot实现多tomcat的session共享: IP角色 192.168.0.170n ...

  4. oracle不同session共享变量,SpringMVC使用oracle配置session共享

    简述 由于开发是单机项目,但是到了配置负载均衡的集群中就发生了问题,使用账号登录后又跳回主页面. 我分析了原因是负载均衡配置的跳转是每次访问都会切换服务,所以在A机器登录后,再次访问B机器找不到有登录 ...

  5. 使用Shiro+Redis实现Session共享

    章节目录 1. 为什么要实现Session共享? 1.1 负载均衡 1.2 负载均衡中的Session问题 1.3 案例演示 2. Shiro架构 3. Shiro集成Redis 1. 为什么要实现S ...

  6. spring-session用mysql实现session共享实践

    前段时间,写了篇<spring-session-data-redis解决session共享的问题>文章,介绍了spring-session使用redis存储实现session共享的内部机制 ...

  7. SpringBoot整合Redis+Redis缓存应用+Redis实现Session共享+...

    一.SpringBoot整合Redis 1.导入依赖 <!--存在Redis依赖--> <dependency><groupId>org.springframewo ...

  8. SpringBoot笔记:SpringBoot2.3集成SpringSession+nginx+redis实现session共享

    文章目录 Spring Session介绍 Redis集成 yml配置 依赖添加 redis存值查看 登录服务器查看redis的值 查询所有"spring:session:"开头的 ...

  9. java分布式会话redis_详解springboot中redis的使用和分布式session共享问题

    对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载均衡算法,由于Nginx对不同的请求分发到某一个Tomcat,Tomca ...

最新文章

  1. C# 委托(Delegate)
  2. shutil常用语法
  3. mysql 日期时间类型 自动转型 及 运算
  4. 单源最短路径——Dijkstra代码实现
  5. lg函数c语言表达式,lgammal - [ C语言中文开发手册 ] - 在线原生手册 - php中文网
  6. 这样设置路由,99.9%的黑客都攻不破
  7. 【转】SIP 中的Dialog,call,session 和 transaction
  8. 获取火山无水印视频方法
  9. Spring子项目了解
  10. 计算机视觉三大国际会议ICCV、ECCV、CVPR
  11. (转贴) 亦卷亦舒
  12. J v a v 与 您
  13. 一起领略css3动画的强大
  14. 爬取沪江网考研词汇并按要求存为txt
  15. pycharm设置-使用Qt Designer配置
  16. Prometheus监控系列--“普罗米修斯“ 入门 | 初识 | 简述 | 超详细
  17. explore_UserGuide
  18. Python实现微信消息连续发送
  19. 潭州学院html学习(day01)
  20. Java商城面试题(三)

热门文章

  1. 网站加入百度云加速后,出现Error520源站返回未知错误怎么办?
  2. 用requests的get检验电视直播源是否有效的方法
  3. 站长收入差距逐渐拉开 高收入站长稳步增加
  4. 华为荣耀5C真机调试android过程遇到的问题
  5. css中的before与after
  6. 日企面试官谈赴日开发工作
  7. 面试必刷25道面试题(附答案)从容应对互联网大企面试
  8. Geekbench跑分及功耗对比:A15 麒麟9000 高通8Gen1 三星exynos2100 天玑1200
  9. Python实现公众号每日自动发早/晚安消息(详细教程)
  10. python代码过长的换行