Я бы сказал, что неспособность воспроизвести это локально является существенным ограничением. Я попытался бы настроить вашу локальную среду или тестовый сервер для воспроизведения проблемы, используя JMeter или другое программное обеспечение для нагрузочного тестирования, чтобы имитировать нагрузку одновременных пользовательских обращений. Как только это будет сделано, ваш цикл настройки / компиляции / тестирования станет намного короче, и вы сможете вносить экспериментальные изменения, не опасаясь нарушения работы вашего рабочего сервера. Это может показаться большим усилием, но работа принесет дивиденды не только за эту ошибку, но и за ошибки, с которыми вы можете столкнуться в будущем.
Похоже, что это может быть ошибкой в потоке, тем более что spring по умолчанию использует синглтонную область видимости. Имея это в виду, обратите внимание на создание многопоточных интеграционных тестов для службы, которая не работает. После того, как вы воспроизвели ошибку с помощью нагрузочного тестирования, вы можете убедиться, что это ошибка многопоточности, выбрав основной метод обслуживания synchronized
, предотвращающий одновременное использование. Если ошибка исчезнет, это, скорее всего, ошибка параллелизма.
Что касается нахождения строки ошибки - нет никакой строки, чтобы искать, так как код генерируется. Лучшее, что вы можете сделать, это добавить защитные проверки во все bean-компоненты, которые используются в совете вокруг UserService. (Например, проверьте нулевые значения из-за отсутствующих инъекций.) Атрибут init-method
в bean-компонентах полезен для выполнения проверок того, что bean-компонент полностью построен и все необходимые соавторы установлены.