You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 1.5.2.RELEASE如何实现数据库存储HTTP会话?

Spring Boot 1.5.2.RELEASE + Spring Session 1.3 配置JDBC会话存储方案

嗨,我来帮你搞定Spring Boot 1.5.2.RELEASE里的JDBC会话存储配置~毕竟1.x和2.x版本的配置逻辑差异确实不小,之前在2.x里用的自动配置属性在1.5里可不适用哦。下面是一步步的配置方案:

1. 引入依赖

Spring Boot 1.5.x的spring-boot-starter-session默认不会自动引入JDBC存储的依赖,所以需要手动添加spring-session-jdbc。如果用Maven,在pom.xml里加入:

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-jdbc</artifactId>
    <!-- Spring Boot 1.5.2.RELEASE的依赖管理已经指定了兼容的1.3.x版本,可省略version -->
</dependency>

如果是Gradle,添加:

compile 'org.springframework.session:spring-session-jdbc'

2. 启用JDBC会话存储配置

创建一个配置类,通过@EnableJdbcHttpSession注解开启JDBC会话存储功能:

import org.springframework.context.annotation.Configuration;
import org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession;

@Configuration
@EnableJdbcHttpSession
public class HttpSessionConfig {
    // 无需额外代码,Spring会自动使用你配置的数据源
}

3. 配置数据库连接

在application.properties(或application.yml)里配置你的数据库连接信息,以MySQL为例:

# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_db_name?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=your_db_user
spring.datasource.password=your_db_password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# 会话超时时间(可选,单位秒,默认30分钟)
server.session.timeout=1800

4. 初始化会话表(关键!)

Spring Session 1.3不会像2.x那样自动创建spring_session和spring_session_attributes表,你需要手动初始化这两张表,有两种方式:

方式一:手动执行SQL脚本

直接在你的数据库里执行官方提供的SQL脚本(以MySQL为例):

CREATE TABLE IF NOT EXISTS 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 IF NOT EXISTS SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);
CREATE INDEX IF NOT EXISTS SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);
CREATE INDEX IF NOT EXISTS SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);

CREATE TABLE IF NOT EXISTS 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;

不同数据库的脚本略有差异,你可以在spring-session-jdbc的jar包中找到对应数据库的脚本(路径:org/springframework/session/jdbc/schema-*.sql)。

方式二:让Spring Boot自动执行脚本

把上述SQL脚本保存到src/main/resources/schema.sql,然后在application.properties中添加:

# 指定初始化脚本位置
spring.datasource.schema=classpath:schema.sql
# 启动时执行初始化脚本
spring.datasource.initialization-mode=always

这样应用启动时会自动执行脚本创建表。

5. 测试验证

启动应用后,你可以登录或创建会话,然后查看数据库中的spring_session和spring_session_attributes表,应该能看到会话数据被存储进去了。

内容的提问来源于stack exchange,提问作者Frankie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:05:09