В моем проекте spring-jdbc у меня есть класс под названием DBStuff
, который я использую для подключения к db и создания простых операций db. Это веб-проект, и есть пользователи, поэтому, естественно, я использую механизм сеанса. Когда мне нужно получить данные запроса в DBStuff
классе, я использую эту строку кода ниже:Является ли RequestContextHolder потокобезопасным?
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Но, нет никакого объяснения, что если RequestContextHolder
потокобезопасно или нет. Даже официальный представитель весны forum не имеет на это ответа. Из-за использования сервлета, я должен обеспечить потокобезопасный характер для пользователей.
По определению RequestContextHolder
определяется как «Класс держателя, чтобы выставить веб-запрос в виде связанного с потоком объекта RequestAttributes
». Но я не уверен, что «thread-bound» означает потокобезопасность.
Это поточно, но почему вы связывание вашего слоя доступа к данным на веб-слой ... Это запах кода и imho сигнал, что вы делаете что-то неправильно. –
Уровень данных DataAccess и веб-уровень являются отдельными, но каждый пользовательский запрос сохраняет свои данные для входа, которые играют огромную роль в операциях БД. Должен ли я изменить класс DataAccess на прототип? Но если я это сделаю, разве это не стоит слишком много памяти и производительности для моей системы? –
Нет, они не разделены ... Уровень данных зависит от веб-слоя. Вы не можете взять свой класс dbaccess и поместить его на сервер, не поддерживающий веб-интерфейс, поскольку он тесно связан с javax.servlet и веб-пакетами Spring. Следовательно, связь между сетью и доступом к данным. Если вам это нужно, либо передайте этот материал в аргументе метода, либо сохраните его в «ThreadLocal», но не пропустите веб-детали в каких-либо других, а затем связанных веб-классах. –