Spring-JDBC-сессия с гибернацией с несколькими арендаторами

#spring #spring-boot #multi-tenant #spring-session

#весна #spring-загрузка #многопользовательский #spring-сессия

Вопрос:

Я пытаюсь создать загрузочное приложение spring (масштабируемое по своей природе) с гибернацией для нескольких арендаторов (подход к базе данных для каждого арендатора), эта часть работает нормально. Я запускаю это приложение в кластере, я сталкиваюсь с проблемами в HTTP-сеансах (необходимо реплицировать HTTP-сеансы на другие узлы). Для этого я попытался использовать Spring JDBC Session, но столкнулся с проблемами при ее настройке.

Я только что включил зависимость весеннего сеанса в файл gradle и применил аннотацию @EnableJdbcHttpSession к моим конфигурациям приложений.java-файл.

Проблема, с которой я сталкиваюсь, заключается в том, что она выдает мне ошибку, что для некоторых компонентов требуется компонент с именем ‘DataSource’, я тоже пытался это объявить.

Я веду карту источников данных, в которой хранится источник данных каждого арендатора.

После запуска приложения карта каким-то образом содержит только один источник данных, который является источником по умолчанию (для которого я создал компонент с именем ‘DataSource’).

Я не уверен, чего мне здесь не хватает, или даже поддерживает многопользовательскую работу Spring-Session или нет.

В приведенном ниже коде показано, как я создаю карту источника данных, которую я дополнительно инициализирую при запуске приложения:

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

Аналогичным образом я также определил компонент, который возвращает источник данных по умолчанию.

Я ожидаю, что для каждого арендатора будут таблицы сеансов, в которых будут храниться данные сеанса отдельно. Может кто-нибудь, пожалуйста, предложить выход из этого? или, может быть, если бы кто-нибудь мог поделиться некоторыми примерами базы кода с такой интеграцией, это было бы здорово.

Комментарии:

1. Ваша карта существует только локально в каждом экземпляре службы. Вместо репликации HTTP-сеансов на всех узлах, я думаю, вам следует рассмотреть возможность реализации токена Oauth2 JWT. Было бы намного проще и естественнее обрабатывать многопользовательскую.

2. Многопользовательская аренда уже работает нормально, проблема связана с весенней сессией. Я хочу реплицировать HTTP-сеансы на другие узлы кластера.