У меня есть веб-сервис Spring Boot с некоторым методом, который выполняет get-from-DB, за которым следует вставка, если не присутствует (с некоторой логикой между ними, которую я бы сейчас предпочел оставить в Java).
Метод аннотирован @Transactional, но, конечно, с уровнем изоляции по умолчанию (чтение зафиксировано), возможно, что одна и та же строка будет вставлена дважды, если два запускаются параллельно.
Если я изменю уровень изоляции на сериализуемый, то получу снижение производительности.
Будет ли лучше использовать обычную синхронизацию Java и синхронизировать глобальный объект, который уникально представляет запрашиваемый / добавленный элемент? По сути, я бы интернировал строковый параметр, передаваемый методу, который представляет какое-то имя элемента, и синхронизировался с этим.
Очевидно, я не смогу масштабировать по горизонтали, но давайте предположим, что этот экземпляр веб-службы является единственным клиентом БД.