Дело в том, что
У меня есть ServiceA
, который отвечает AResponse
после 5000 мс на запрос.
У меня также есть ServiceB
, который вызывает ServiceA
(что делает вызов API как). И согласно AResponse
вставляет данные в дБ (в настоящее время hsql).
У меня ограничение на пул соединений в 2 дБ. И время ожидания соединения 30000ms по умолчанию. Я не хочу менять эти значения.
Итак, при попытке 100 пользователей одновременно вызывать serviceB.getAndSave()
метод. Это дает тайм-аут после 30 секунд для пользователей.
// ServiceA method of getting response
public AResponse getData(param){
try {
Thread.sleep(5000);
return new AResponse("SUCCESS");
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}
// ServiceB class has annotation @Transactional
// In ServiceB inserts data to db depends on serviceA's AResponse.
public getAndSave(){
AResponse aresponse = serviceA.getData(param);
MyData myData = new MyData(aresponse)
myRepository.save(myData);
}
Так, как я могу справиться с этой ситуацией без грязных данных и обработать эту ловушку тайм-аута. Кстати, все мои данные должны быть сохранены правильно.