#java #spring #spring-batch #fork
#java #spring #spring-batch #fork
Вопрос:
Я новичок в Spring-Batch и хочу использовать его для пакетной обработки некоторых заданий, в которых используется устаревшая библиотека. У этой библиотеки есть недостатки:
- быть не потокобезопасным
- экземпляр некоторых объектов в библиотеке не может обрабатывать несколько заданий подряд (из-за вложенных одноэлементных статических экземпляров).
Таким образом, кажется, что единственным решением является разветвление JVM для каждого задания.
Мой вопрос: как я могу это сделать, используя spring-batch? Большинство решений в документации ориентированы на потоки.
Комментарии:
1. как вы запускаете задания с помощью spring batch admin? командная строка?
2. @MichaelLange Я использую API Spring Batch в своей основной программе.
Ответ №1:
«разветвить JVM» — как бы вы это сделали? Полностью запустить новый процесс? Но на самом деле это не приведет к «разветвлению» JVM — это означает, что любая информация о состоянии, которую вам нужно скопировать в «дочернюю» JVM, должна быть выполнена вручную. Как насчет того, чтобы как-то использовать другой загрузчик классов для каждого задания?
Комментарии:
1. Да, вы правы: я не знал, что JVM не была «libc-подобной» для разветвления. Загрузчик классов кажется хорошим решением, но я боюсь столкнуться с
PermGenSpace
ошибкой из-за нескольких статических элементов, не удаленных сборщиком мусора…2. Это было то, с чем мы сталкивались и с Tomcat во время разработки, когда мы многократно повторно развертывали приложение без перезапуска сервера. Затем увидел эти флаги JVM «CMSClassUnloadingEnabled» и «CMSPermGenSweepingEnabled». Но к этому времени можно было бы просто подумать о замене устаревшей библиотеки чем-то другим.
3. к сожалению, мы должны признать это: в настоящее время мы не можем заменить эту библиотеку
4. @Kartoch, какую JRE вы используете, «CMSClassUnloadingEnabled» и «CMSPermGenSweepingEnabled» не поддерживаются?