Я создал несколько рабочих классов для обработки заданий, которые они получают с сервера заданий.Код, который должен быть выполнен, зависит от некоторых переменных среды, которые настраиваются с помощью spring-config + application.properties.
В данный момент я запускаю SpringApplication.run (app.class) для инициализации весенней загрузки перед запуском рабочей станции.так что моя кодовая база может получить доступ к переменным среды через ApplicationContext.getBean ().
Проблема в том, что рабочие используют цикл while (true), пружинные перехватчики отключения никогда не запускаются.Таким образом, каждый раз, когда новое задание принимается и выполняется, новые экземпляры объектов загружаются в загрузчик классов Spring.Эти объекты не являются GCed, поскольку они имеют ссылку в загрузчике классов, и поэтому Metaspace постоянно растет, что приводит к исключению OOM.
Удаление загрузки Spring и жесткое кодирование переменных среды в коде исправляет эту проблему, ноэто, очевидно, не практическое решение.
Я не совсем уверен, как это исправить, и я открыт для предложений.В идеале я хотел бы загрузить spring-config, чтобы я мог получить доступ к bean-компонентам и переменным окружения, не сталкиваясь с загрузчиком классов или какими-либо другими издержками Spring.