将 spring 会话 JDBC 与现有数据库(不是 springboot)一起使用

Muh*_*d B 4 spring spring-session spring-config

我的应用程序在没有 spring boot 的情况下使用 spring web mvc 框架运行。现在我想使用 spring session JDBC 将会话存储到应用程序使用的数据库中。我在网上找到的所有例子都是使用spring boot的,如果不使用spring boot,他们使用的数据源配置是EmbeddedDatabase这样的:

    @Bean
    public EmbeddedDatabase dataSource() {
            return new EmbeddedDatabaseBuilder() 
                            .setType(EmbeddedDatabaseType.H2)
                            .addScript("org/springframework/session/jdbc/schema-h2.sql").build();
    }
Run Code Online (Sandbox Code Playgroud)

我有使用 HikariCP 的数据源配置,我希望 spring 会话使用此数据源配置。

@Bean
public DataSource dataSource() {
    HikariConfig config = new HikariConfig();
    config.setDriverClassName(env.getRequiredProperty("jdbc.driver"));
    config.setJdbcUrl(env.getRequiredProperty("jdbc.url"));
    config.setUsername(env.getRequiredProperty("jdbc.username"));
    config.setPassword(env.getRequiredProperty("jdbc.password"));
    config.setMinimumIdle(env.getRequiredProperty("jdbc.pool.minimumIdle", Integer.class));
    config.setMaximumPoolSize(env.getRequiredProperty("jdbc.pool.maximumPoolSize", Integer.class));
    config.addDataSourceProperty("cachePrepStmts", env.getRequiredProperty("jdbc.prop.cachePrepStmts"));
    config.addDataSourceProperty("prepStmtCacheSize", env.getRequiredProperty("jdbc.prop.prepStmtCacheSize"));
    config.addDataSourceProperty("prepStmtCacheSqlLimit", env.getRequiredProperty("jdbc.prop.prepStmtCacheSqlLimit"));
    HikariDataSource ds = new HikariDataSource(config);
    return ds;
}
Run Code Online (Sandbox Code Playgroud)

如何使用我当前的配置与 spring 会话集成?

xer*_*593 5

据我了解spring-session javaconfig-jdbc sample / doc,您“只”需要:

  1. 注解“你的配置类”( YourConfig)用org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession

  2. 命名您的DataSource“数据源”。(完毕!;)

  3. 提供一个PlatformTransactionManager豆,立足dataSourceYourConfig

  4. (在 servlet 环境中 - 就像你的一样)引入一个AbstractHttpSessionApplicationInitializer(在类路径中)引用YourConfig

    public class Initializer extends org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer { // <1>
    
      public Initializer() {
        super(YourConfig.class); // <2>
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

如果你想安装手动DB模式或使用外部工具,SQL脚本位于弹簧session.jar(组织/ springframework的/会话/ JDBC /模式- !@@平台@@ SQL)文件或分别在源代码存储库


这些(应用程序)属性允许进一步定制:

# Session store type. [jdbc|redis|hazelcast|mongodb]
spring.session.store-type=jdbc
# Session timeout. If a duration suffix is not specified, seconds will be used.
server.servlet.session.timeout= 
# Database schema initialization mode. [alwys | never | embedded]
spring.session.jdbc.initialize-schema=always 
# Path to the SQL file to use to initialize the database schema.(see: https://github.com/spring-projects/spring-session/tree/master/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc)
spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-@@platform@@.sql
# custom spring session table name (see : https://github.com/spring-projects/spring-session/issues/1230) 
spring.session.jdbc.table-name=SPRING_SESSION
Run Code Online (Sandbox Code Playgroud)
  • 在 jar/source 分发中,您还会找到“清理”(-drop)脚本
  • 目前提供的平台有:

    db2
    derby
    h2
    hsqldb
    mysql
    oracle
    postgresql
    sqlite
    sqlserver
    sybase
    
    Run Code Online (Sandbox Code Playgroud)