У меня есть весенний класс, который, когда вы вызываете httpDatastoreFacade.getDatastore()
, должен выдать вам хранилище данных потока запросов REST:
@Component
public class HttpDatastoreFacade {
private Boolean useAttribute = Boolean.FALSE;
public String getDatastore() {
HttpServletRequest request = ((ServletRequestAttributes)RequestContextholder.currentRequestAttributes()).getRequest();
String datastore = request.getParameter("datastore");
if(useAttribute) {
datastore = String.valueOf(request.getAttribute("datastore"));
}
return datastore;
}
public void setDatastore(String datastore, Boolean useAttribute) {
HttpServletRequest request = ((ServletRequestAttributes)RequestContextholder.currentRequestAttributes()).getRequest();
request.setAttribute("datastore", datastore);
this.useAttribute = useAttribute;
}
public Boolean getUseAttribute() {
return useAttribute;
}
}
Иногда в моем коде мне нужно изменить это datastore
, но затем я Я хочу немедленно изменить его после того, как я вызываю любой код, которому нужно datastore
по-другому:
@Component
public class someClass() {
@Autowired
private HttpDatastoreFacade datastoreFacade;
@Autowired
private OtherClass otherClass;
public void someMethod() {
String savedDatastore = datastoreFacade.getDatastore();
String savedUseAttribute = datastoreFacade.getUseAttribute;
//setDatastore to new settings
datastoreFacade.setDatastore("newStore", true);
//this is where I call my method's or methods that need this new datastore
otherClass.callSomeMethod();
//set the datastore back to old value
datastoreFacade.setDatastore(savedDatastore , savedUseAttribute );
}
}
Моя проблема в том, что я сталкиваюсь с проблемами многопоточности, где useAttribute
- это правда, но datastore
- нет. не указан в атрибуте запроса.
Я ищу лучший шаблон java, в котором я могу заблокировать HttpDatastoreFacade
, пока я выполняю свой otherClass.callSomeMethod()
или любые другие вызовы, которые мне нужно сделать, пока я установите HttpDatastoreFacade
обратно в нормальное состояние. otherCalss.callSomeMethod
может вызывать и другие методы, которые используют HttpDatastoreFacade
, и они могут захотеть установить его так, как им нужно. Поэтому, может быть, мне нужен нехватка стека datastore
, который безопасен для потоков?