Переменная репозитория становится нулевой, когда параллельные потоки получают доступ к загрузке Spring через JMeterJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Переменная репозитория становится нулевой, когда параллельные потоки получают доступ к загрузке Spring через JMeter

Сообщение Anonymous »

Я работаю над веб-приложением загрузки Spring, в котором у нас есть MemberGroupRepository и MemeberRoleRepository для хранения групп и ролей участников соответственно. У нас есть одна общая база данных, в которой хранится информация/учетные данные пользователя, и база данных учетных записей, в которой хранятся группы участников и роли. Может быть несколько баз данных учетных записей. Пользователь может быть частью нескольких учетных записей, и на основе привилегий пользователя, специфичных для конкретной учетной записи, мы обновляем привилегии.
Например, пользователь «А» может иметь роль администратора в учетной записи «dev». ' и может иметь роль только для чтения в учетной записи "test".
У нас есть GenericRepository, который наследуется как MemberGroupRepository, так и MemeberRoleRepository.
GenericRepository.java

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

public class GenericRepository {
private MongoOperations mongoOperations; // Holds the information of mongo db connection
// code logic
}

MemberGroupRepository.java

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

@Repository
public class MemberGroupRepository extends GenericRepository {
// code logic
}
MemberRoleRepository.java

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

@Repository
public class MemberRoleRepository extends GenericRepository {
// code logic
}
Поле mongoOperations из соответствующих репозиториев — это то, которое содержит соединение с БД. Поскольку группы участников и роли участников получены из определенной учетной записи, поле mongoOperations будет установлено динамически на основе информации аутентификации и обнулится после завершения доступа к информации о группе участников и роли.
Он отлично работает, когда мы входим в систему вручную с 2-3 параллельными подключениями. Но все идет совсем не так, когда происходит одновременный вход в систему и дальнейшие вызовы GET API. Мы используем JMeter для измерения производительности, и если мы создаем 100 одновременных подключений, мы наблюдаем следующие проблемы.
MongoOperations элемента MemberGroupRepository неожиданно становится нулевой. Я прочитал документацию по безопасности Spring, изучил множество форумов и попробовал несколько вещей (как показано ниже), но ни одна из них не сработала.
  • Настройка SecurityContextRepository

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

    this.setSecurityContextRepository(new DelegatingSecurityContextRepository(
new RequestAttributeSecurityContextRepository(), new HttpSessionSecurityContextRepository()));
  • Создать EmptyContext при успешной аутентификации

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

  @Override
protected void successfulAuthentication(
HttpServletRequest request,
HttpServletResponse response,
FilterChain chain,
Authentication authResult)
throws IOException, ServletException {
// Following 3 lines are newly added
SecurityContext context = SecurityContextHolder.createEmptyContext();
context.setAuthentication(authResult);
SecurityContextHolder.setContext(context);
// SecurityContextHolder.getContext().setAuthentication(authResult); --> This is the old one
chain.doFilter(request, response);
}
Насколько я понимаю, Spring boot создает новый поток для каждого запроса, и все репозитории и службы являются частными только для этого потока, и любые изменения этих переменных являются локальными для этого потока.< /p>
т.е. Каждый запрос имеет свою собственную версию переменной MemberGroupRepository.mongoOperations, и любое изменение, внесенное любым потоком, повлияет только на его собственную версию, но не на переменные других потоков.
В чем может быть причина этой проблемы? Любое предложение будет оценено.


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

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

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

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

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

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

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