Я хочу вставить одну запись как не существующую, обе записи сохраняются вместо одной, если одновременный запрос выполняется одновременно, а не только одна запись.
@GetMapping("/bookslot")
public void bookTicket() {
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.execute(run(slotService::method1));
executor.execute(run(slotService::method2));
executor.shutdown();
}
private Runnable run(FailableRunnable runnable) {
return () -> {
try {
runnable.run();
} catch (Exception e) {
e.printStackTrace();
}
};
}
репозиторий
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("SELECT e FROM Slot e WHERE e.time = :time")
Optional findByTimeWithLock(@Param("time") LocalTime time);
класс обслуживания
@Transactional
public void method1() throws InterruptedException {
saveSlot("sam", "07:00");
Thread.sleep(1000);
}
@Transactional
public void method2() throws InterruptedException {
saveSlot("Curran", "07:00");
Thread.sleep(1000);
}
@Transactional
public void saveSlot(String name, String newTime) {
LocalTime time = LocalTime.parse(newTime);
Optional slotOptional = slotRepo.findByTimeWithLock(time);
if (!slotOptional.isPresent()) {
Slot newSlot = new Slot();
newSlot.setName(name);
newSlot.setTime(time);
slotRepo.save(newSlot);
}
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... springboot
Как реализовать механизм блокировки базы данных при весенней загрузке ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
React Fiber Это механизм рендеринга или механизм согласования в рамках рендеринга?
Anonymous » » в форуме Javascript - 0 Ответы
- 28 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Возникла ошибка при загрузке изображения по определенному пути при весенней загрузке
Anonymous » » в форуме JAVA - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-