Все, что делает @Async, - это заставляет методы аннотированного компонента выполняться в другом потоке, где он получает поток из пула (который может быть указан, поэтому вы можете выбрать для некоторых операций выделенный пул).
@ Сам Async ничего не делает для блокировки таблиц базы данных или чего-либо еще, связанного с базой данных.Если вам нужна блокировка на уровне базы данных, вам придется реализовать это другими способами.Если вы хотите, чтобы при вызове использовалась транзакция, вы должны использовать аннотацию @Transactional для компонента, вызываемого асинхронно.Транзакция будет отделена от транзакции звонящего.Конечно, транзакция может вызвать блокировку базы данных в зависимости от уровня изоляции и реализации базы данных.
Сложно использовать @Async для работы с базой данных.Одна ловушка происходит с постоянными сущностями jpa, передаваемыми через потоки, когда у них есть ленивое свойство, которое реализуется в новом потоке (где прокси-сервер теперь недопустим, потому что он не может добраться до entityManager из старого потока).Безопаснее, если вещи, передаваемые между потоками, неизменны.
@ Async добавляет сложности и трудно рассуждать.Существуют возможности для условий гонки и взаимоблокировок, где, если вы не понимаете это правильно, могут случиться плохие вещи, и вы не можете рассчитывать на тестирование для выявления проблем.Он работает без сети, если вы хотите, чтобы какая-либо инфраструктура помогла с обработкой исключений, повторными попытками или другим восстановлением, вам придется предоставить ее самостоятельно.
Так что нет, я бы не стал называть это целесообразным.Это хорошая возможность иметь в вашем наборе инструментов, которая может быть полезна для нескольких отдельных случаев, но широкое использование может показаться плохим.Есть альтернативы, если вы ищете способы сохранения данных без блокировки.