Могут ли вызовы блокировки java.io.RandomAccessFile.readBytes быть приемлемыми в реактивном приложении? В каких случаях?

#java #spring-webflux #project-reactor #reactor #blockhound

Вопрос:

У нас есть приложение, использующее Spring WebFlux, которое использует Project Reactor. Я запустил оценку BlockHound для приложения, и оно сообщило, что java.io.RandomAccessFile.readBytes блокирует вызовы в таких библиотеках, как hibernate-валидатор, orika mapper. hibernate-валидатор считывает сообщения об ошибках из файла ValidationMessages.properties. Насколько серьезно негативное влияние этого блокирующего вызова (который просто считывает сообщение из файла свойств) для реактивного приложения? Можно ли это проигнорировать или мы должны найти неблокирующее решение для этой проверки?

Комментарии:

1. Мера. Я очень сомневаюсь, что это окажет влияние, так как файл будет кэширован после первого раза.

2. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

К сожалению, здесь нет быстрого ответа — это зависит от того, вам придется посмотреть на использование RandomAccessFile.readByte() в каждой библиотеке и решить, приемлемо это или нет.

В общем:

  • Если он просто используется при запуске — нет проблем, так как это произойдет вне любого цикла событий;
  • Если это может произойти в какой-то момент цикла событий, то это абсолютно проблема, которую вам нужно обойти.

Если hibernate-validator это действительно используется только для чтения файла свойств, то это, скорее всего, относится к первой категории, так что это не проблема. Однако я бы с осторожностью отнесся к этому, поскольку кажется немного странным , что файл свойств загружается как a RandomAccessFile , они обычно читаются последовательно, поэтому я бы, по крайней мере, дважды проверил это, чтобы убедиться, что это действительно происходит.