Реализация контекста выполнения запроса на уровне потока в Java - PullRequest
1 голос
/ 02 февраля 2020

Мы используем Java веб-приложение поверх Tomcat 8. Поток управления для любого API в веб-приложении:

Сервлет -> Уровень службы -> Уровень DAO / DB

Теперь мы хотим, чтобы некоторая информация о выполнении запроса была заполнена на уровне Service / DAO, которая будет использоваться на уровне Servlet (это предусмотрено проектом и поэтому не может быть изменена).

One способ сделать это - создать ThreadLocal в сервлете и передать его всем слоям, но это требует изменения сигнатуры метода и, следовательно, является довольно навязчивым изменением для нашего приложения.

Другим способом было бы реализовать что-то вроде threadLocal путем хранение карты c, где ключ - это идентификатор потока, а значение - список. Любой слой может записать / добавить на карту этот идентификатор потока и, в конце запроса, прочитать его верхним слоем.

Есть ли другие способы сделать это?

Редактировать 1 - Больше информации о настройке

Верхний уровень имеет перехватчик регулирования, который должен знать 2 вещи на запрос, который заполняется нижестоящим уровнем:
- потребляемые операции (например, IOPS DynamoDB) et c), который известен уровню DAO.
- был ли обработан запрос.
Эта информация обновляется в модуле регулирования token bucket.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...