Как сделать сохранение репозитория синхронизированным с Spring Boot - PullRequest
0 голосов
/ 10 мая 2018

У меня есть один метод, который сначала получает последний идентификатор из моей таблицы по одному типу. затем я устанавливаю свой бин с этим номером и сохраняю

  Long number = geradorProtocoloService.getNumero(protocolo.getTipo()    
  protocolo.setNumber(number);     
  protocolo = protocoloRepository.saveAndFlush(protocolo);

Я поместил этот код в синхронизированный блок

synchronized (this) {
  protocolo.setNumero(geradorProtocoloService.getNumero(protocolo.getTipo());
  protocolo = protocoloRepository.saveAndFlush(protocolo);
}

метод имеет больше логики (сохраните файл и т. Д.), Затем верните его моему пользователю

но когда я запускаю свои тесты, он несколько раз ловит одно и то же число (цифра), я думаю, это происходит потому, что jpa не фиксирует мою транзакцию при выполнении saveAndFlush.

Так как я могу сделать так, чтобы все в моем блоке синхронизации было зафиксировано с помощью jpa

ТКС

1 Ответ

0 голосов
/ 14 мая 2018

Вы, вероятно, правы в своем анализе.

Обычно транзакции контролируются аннотациями @Transactional. Поэтому, если вы извлекаете синхронизированный блок в методе Spring Bean с аннотацией @Transactional и вызываете его извне любой транзакции, которую он в конце концов совершит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...