Обработка второго запроса начинается, как только первый поток выходит из синхронизированного блока. К тому времени транзакция может еще не быть совершена. Транзакция будет зафиксирована только после завершения выполнения метода.
Одно из возможных решений - добавить ключевое слово synchronized
в сам метод.
@Transactional
public synchronized void save(String myIds) {
List<mydata> data = getDataToSaveOrUpdate(myIds);//Returns the new dataList and updates old data
repository.saveAll(data);
logger.info("request processed");
logger.debug("exiting the method");
}
При использовании * нужно быть очень осторожным. 1007 * ключевое слово. Я не знаю, что вам нужно, возможно, это допустимое использование для вашего сценария.