В моем приложении Spring-boot я запускаю массовое обновление для двух моих таблиц каждый час, и мне нужно предотвратить любые чтения / записи / удаления на двух таблицах во время обновления (процесс длянесколько секунд).Я попробовал нижеприведенное, но, похоже, не выдает исключение блокировки, как я ожидаю, когда я пытаюсь ПРОЧИТАТЬ во время процесса обновления.Есть ли способ заблокировать базу данных и заставить ее генерировать исключение во время выполнения следующей транзакции?
@Service
public class ParentService {
@Autowired
private ParentRepository parentRepository;
@Autowired
private ChildRepository childRepository;
@Transactional
@Lock(LockModeType.PESSIMISTIC_WRITE)
public void refresh(List<ParentEntity> parents) {
childRepository.deleteAllInBatch();
childRepository.resetAutoIncrement();
parentRepository.deleteAllInBatch();
parentRepository.resetAutoIncrement();
parentRepository.save(parents);
}
}
@Repository
@Transactional
public interface ParentRepository extends JpaRepository<ParentEntity, Integer> {
@Modifying
@Query(
value = "alter table parent auto_increment = 1",
nativeQuery = true
)
void resetAutoIncrement();
}
@Repository
@Transactional
public interface ChildRepository extends JpaRepository<ChildEntity, Integer> {
@Modifying
@Query(
value = "alter table child auto_increment = 1",
nativeQuery = true
)
void resetAutoIncrement();
}