Как реализовать пессимистическую блокировку в приложении SpringBoot (Maven)
Я пытался реализовать пессимистическую блокировку в приложении SpringBoot. Итак, мои вопросы:
- Нужно ли добавлять persistence.xml или можно добавить все в pom.xml, если да, то как?
- Если мне нужно добавить persistence.xml, как это должно выглядеть? Я попробовал этот подход и продолжаю получать сообщение об ошибке: "Эта конфигурация запрещает оптимизацию во время выполнения, но следующие перечисленные типы не были улучшены во время сборки или во время загрузки класса с javaagent:.... "
Ранее я реализовал оптимистическую блокировку, и все, что я добавил, это @Version и еще несколько строк. Почему пессимистическая блокировка сложна? Я делаю что-то неправильно?
Это мои зависимости
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.6.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
А это из Сервиса
@Autowired
EntityManager em;
@Transactional
public Reservation createReservation(ReservationDTO reservationDTO) {
........
........
for (String id : ids) {
Table table = em.find(Table.class, Long.parseLong(id));
em.lock(table, LockModeType.PESSIMISTIC_WRITE);
em.refresh(table);
tableRepository.save(table);
.........
И это из контроллера
.......
try {
Reservation reservation = reservationService.createReservation(reservationDTO);
if (reservation == null){
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
emailService.sendMailInvite(reservation, guest);
return new ResponseEntity(HttpStatus.OK);
}catch (PessimisticLockException e){
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
.......
Спасибо!