Java 使用JDBC的Spring会话-如何使用单独的DB作为会话存储
我正在开发一个使用Spring会话JDBC的应用程序。我还将SpringJPA用于其他实体。我的问题是,如何配置Spring引导应用程序,以允许将单独的数据库用于会话存储 我已经引用了这个,但是答案中提到的JdbcHttpSessionConfiguration构造函数似乎不再有效(我使用的是SpringBoot2.1.1)。除此之外,我找不到关于这个问题的任何文件。我找到了有关如何使用JDBC支持配置Spring会话的信息,以及如何在Spring中使用多个数据源的信息,但没有找到如何将两者结合起来的信息。我认为这可能涉及扩展Java 使用JDBC的Spring会话-如何使用单独的DB作为会话存储,java,spring-boot,spring-session,Java,Spring Boot,Spring Session,我正在开发一个使用Spring会话JDBC的应用程序。我还将SpringJPA用于其他实体。我的问题是,如何配置Spring引导应用程序,以允许将单独的数据库用于会话存储 我已经引用了这个,但是答案中提到的JdbcHttpSessionConfiguration构造函数似乎不再有效(我使用的是SpringBoot2.1.1)。除此之外,我找不到关于这个问题的任何文件。我找到了有关如何使用JDBC支持配置Spring会话的信息,以及如何在Spring中使用多个数据源的信息,但没有找到如何将两者结合
JdbcHttpSessionConfiguration
,但不幸的是,我无法找到正确的方法
到目前为止,我只有这些:
@Configuration
class SessionConfig extends JdbcHttpSessionConfiguration {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();
}
}
但是,上面也尝试在H2存储中创建所有我的实体表
我的主数据源(PostgreSQL)在我的应用程序.properties
中指定
spring.session.store-type=jdbc
spring.datasource.url=jdbc:postgresql://localhost/auth
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
感谢您的指导。自Spring Boot 2.0.0以来,您可以使用注解
@SpringSessionDataSource
指定Spring会话应该使用的数据源
要插入的数据源的限定符注释
JdbcOperationsSessionRepository
SpringJdbcHttpSessionConfiguration
类中设置所需数据源的方法
@Autowired
public void setDataSource(@SpringSessionDataSource ObjectProvider<DataSource> springSessionDataSource, ObjectProvider<DataSource> dataSource)
数据库配置
@Configuration
@EnableTransactionManagement
public class DatabaseConfig {
@Bean
@Primary
@ConfigurationProperties("primary.datasource")
public DataSourceProperties primaryDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
public DataSource primaryDataSource() {
return primaryDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Bean
@ConfigurationProperties("session.datasource")
public DataSourceProperties sessionDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@SpringSessionDataSource
public DataSource springSessionDataSource() {
return sessionDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
}
如果不使用嵌入式数据库,请记住在数据库上运行org/springframework/session/jdbc/schema thedbplatform.sql
schema文件。在我的例子中,我运行了org/springframework/session/jdbc/schema postgresql.sql
如果要使用H2数据库进行会话管理,可以从应用程序.properties
中删除会话.datasource…
,并按如下方式配置数据源
@Configuration
@EnableTransactionManagement
public class DatabaseConfig {
@Bean
@Primary
@ConfigurationProperties("primary.datasource")
public DataSourceProperties primaryDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
public DataSource primaryDataSource() {
return primaryDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Bean
@SpringSessionDataSource
public EmbeddedDatabase springSessionDataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("org/springframework/session/jdbc/schema-h2.sql").build();
}
}
@Configuration
@EnableTransactionManagement
public class DatabaseConfig {
@Bean
@Primary
@ConfigurationProperties("primary.datasource")
public DataSourceProperties primaryDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
public DataSource primaryDataSource() {
return primaryDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Bean
@SpringSessionDataSource
public EmbeddedDatabase springSessionDataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("org/springframework/session/jdbc/schema-h2.sql").build();
}
}