使用Hibernate多租户的Spring JDBC会话

使用Hibernate多租户的Spring JDBC会话,spring,spring-boot,multi-tenant,spring-session,Spring,Spring Boot,Multi Tenant,Spring Session,我正在尝试使用Hibernate多租户(每个租户的数据库方法)创建一个spring引导应用程序(本质上是可伸缩的),这部分工作正常。 我在集群中运行这个应用程序,我在HTTP会话中遇到问题(需要在其他节点上复制HTTP会话)。为此,我尝试使用SpringJDBC会话,但在设置时遇到了一些问题 我只是在gradle文件中包含了Spring会话依赖项,并将@EnableJdbcHttpSession注释应用到我的AppConfigurations.java文件中 我面临的问题是,它给了我一个错误,一

我正在尝试使用Hibernate多租户(每个租户的数据库方法)创建一个spring引导应用程序(本质上是可伸缩的),这部分工作正常。 我在集群中运行这个应用程序,我在HTTP会话中遇到问题(需要在其他节点上复制HTTP会话)。为此,我尝试使用SpringJDBC会话,但在设置时遇到了一些问题

我只是在gradle文件中包含了Spring会话依赖项,并将@EnableJdbcHttpSession注释应用到我的AppConfigurations.java文件中

我面临的问题是,它给了我一个错误,一些组件需要名为“dataSource”的bean,我也尝试声明了这一点

我保存了一张数据源地图,其中保存了每个租户的数据源

在应用程序启动之后,映射以某种方式只保存一个默认数据源(我为其创建了一个名为“dataSource”的bean)

我不确定这里缺少了什么,甚至连Spring会话都不支持多租户

下面的代码显示了我如何创建数据源映射,我将在应用程序启动时进一步初始化该映射:

@Bean(name = "dataSourceMap" )
    public Map<String, DataSource> dataSourceMap() {

        Map<String, DataSource> datasources = new HashMap<>();
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setPoolName("defaultDataSourcePool");
        hikariConfig.setMaximumPoolSize(5);
        hikariConfig.setMinimumIdle(5);
        hikariConfig.setJdbcUrl(url);
        hikariConfig.setUsername(username);
        hikariConfig.setPassword(password);
        datasources.put(defaultTenant, new HikariDataSource(hikariConfig));

         return datasources;
    }
@Bean(name=“dataSourceMap”)
公共地图数据源地图(){
Map datasources=newhashmap();
HikariConfig HikariConfig=新HikariConfig();
hikariConfig.setPoolName(“defaultDataSourcePool”);
hikariConfig.setMaximumPoolSize(5);
hikariConfig.setMinimumIdle(5);
hikariConfig.setJdbcUrl(url);
hikariConfig.setUsername(用户名);
hikariConfig.setPassword(密码);
put(defaultTenant,新的HikariDataSource(hikariConfig));
返回数据源;
}
类似地,我还定义了一个返回默认数据源的bean

我希望每个租户都有会话表,分别保存会话数据。
有人能建议一条出路吗?或者,如果有人可以通过这种集成共享一些示例代码库,那就太好了。

您的映射只存在于每个服务实例的本地。我认为您应该考虑实现OAuth2 JWT令牌,而不是在所有节点上复制HTTP会话。处理多租户会更容易、更自然。多租户已经很好地工作了,问题是春季会议。我想将HTTP会话复制到其他群集节点。