Предполагая, что вы можете определить какой-то конкретный класс, который определяет, является ли приложение приложением Springboot, вы можете использовать какой-то инструмент из jdk, который может выводить загруженные классы.Я пробовал это с jcmd (вы найдете это в jre / bin /):
Я не очень хорош в bash, поэтому он может быть не очень эффективным, но это работает для меня, если предположить, что каждыйПриложение Springboot загрузило класс org.springframework.boot.logging.LoggingInitializationContext
, и никакое приложение, не являющееся Springboot, загрузило его.
ps aux | grep [j]ava | awk '{print $2}' | xargs -I{} jcmd {} VM.class_hierarchy | grep "org.springframework.boot.logging.LoggingInitializationContext"
Он находит процессы, содержащие java
, получает только PID, передает его в jcmd, где вы grep для определенного класса.Вывод кажется правильным, единственная проблема в том, что я потерял PID в этой длинной трубе, и я не уверен, как его распечатать.Но если ваша проблема в том, «сколько приложений Springboot», то это не проблема.Я также не уверен, что классы могут появляться дважды при использовании jcmd VM.class_hierarchy
, но это не похоже на это.
Примечание: это работает на JDK 11. Сначала я попробовал jmap, но по некоторым причинам это не работает для меня на JDK 11.