Как реализовать механизм блокировки базы данных при весенней загрузкеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать механизм блокировки базы данных при весенней загрузке

Сообщение Anonymous »

Я хочу вставить одну запись как не существующую, обе записи сохраняются вместо одной, если одновременный запрос выполняется одновременно, а не только одна запись.
@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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»