Проблема с использованием JPA со столбцом TenantID в Spring BootJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с использованием JPA со столбцом TenantID в Spring Boot

Сообщение Anonymous »

Я пытаюсь создать мультиарендную систему для своей CRM-системы. По сути, каждая компания, использующая программное обеспечение, имеет свои собственные разделы таблиц (помимо самой таблицы арендаторов).Я хотел бы разделить данные с помощью столбца TenantID.
Последовательность действий будет такой
. p>
Войти
  • Пользователь входит в систему
  • получает токен JWT
Добавления пользователей новое собрание
  • Пользователь отправляет запрос
  • Контроллер получает запрос с помощью JWT
  • Контроллер отправляет addMeeting в MeetingService.
  • MeetingService извлекает uid из токена.
  • MeetingService извлекает соответствующий клиент и идентификатор арендатора.
  • MeetingService устанавливает TenantID в запросе Компонент TenantContext с областью действия
  • MeetingService извлекает все потенциально конфликтующие собрания (надеюсь, используя TenantID для поиска только собраний данного арендатора)
  • Если конфликта не остается, добавляется новое собрание с правильным набором идентификаторов арендатора.
Также должно быть несколько конечных точек и таблиц, которые вообще не используют идентификатор арендатора< /p>
Вот что у меня есть

Код: Выделить всё

import java.util.Map;
@Component
@RequiredArgsConstructor
//This class is supposed to set the tenantContextString in JPA
public class TenantIdentifierResolver implements CurrentTenantIdentifierResolver, HibernatePropertiesCustomizer {

TenantContext tenantContext=null;

@Override
public String resolveCurrentTenantIdentifier() {
if(tenantContext.getCurrentTenant()==null)
throw new IllegalStateException("No tenant set");

return tenantContext.getCurrentTenant();
}

@Override
public void customize(Map hibernateProperties) {
hibernateProperties.put(AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER, this);
}

@Override
public boolean validateExistingCurrentSessions() {
return false;
}
}

@Component
@RequestScope
//The controller can set the appropriate TenantContext for each request
public class TenantContext  {
@Getter @Setter
private String currentTenant=null;
}
Вот моя конфигурация спящего режима

Код: Выделить всё

spring.jpa.properties.hibernate.multiTenancy = DISCRIMINATOR
spring.jpa.properties.hibernate.tenant_identifier_resolver =  com.polaris.polaris.auth.tenant.TenantIdentifierResolver
Но это выдает мне эту ошибку

Код: Выделить всё

Error creating bean with name 'scopedTarget.tenantContext': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton
Я пытался сделать компонент необязательным, но он вылетает, как только я к нему обращаюсь. такжеsolveCurrentTenantIdentifier запускается несколько раз, как только приложение по какой-то причине загружается (вероятно, это тот момент, когда bean-компонент tenantContext запроса области недоступен). Для чего он нужен и почему я не могу его пропустить? Как мне реализовать план, изложенный выше?

Подробнее здесь: https://stackoverflow.com/questions/793 ... pring-boot
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»