Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JDBC的Spring会话-如何使用单独的DB作为会话存储_Java_Spring Boot_Spring Session - Fatal编程技术网

Java 使用JDBC的Spring会话-如何使用单独的DB作为会话存储

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中使用多个数据源的信息,但没有找到如何将两者结合

我正在开发一个使用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

Spring
JdbcHttpSessionConfiguration
类中设置所需数据源的方法

@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();
    }
}