Сцены:
В онлайн-среде я хочу просмотреть значение атрибута объекта в контейнере весной
команда vmtool
метод первый:
vmtool --action getInstances -c [хэш загрузчика класса] --className [полный путь к целевому классу] --limit 10 -x 2
Пример: запросите все атрибуты этого класса (этот класс является объектом контейнера в spring, поэтому вы можете напрямую увидеть значение атрибута, работающее онлайн )
vmtool --action getInstances -c 7637f22 --className com.gisquest.cloud.oauth2.authentication.GisqAuthenticationSuccessHandler --limit 10 -x 2
Способ 2:
грамматика:
vmtool --action getInstances -c [хэш загрузчика класса] --className [org.springframework.web.context.WebApplicationContext] --express 'instances[0].getBean("имя объекта")'
Пример: запрос объекта в контейнере Spring
vmtool --action getInstances -c [ 7637f22] --className [org.springframework.web.context.WebApplicationContext] --express 'instances[0].getBean("gisqAuthenticationSuccessHandler")'
грамматика:
vmtool --action getInstances -c 7637f22 --className [Полный путь к контейнеру] --express 'instances[0].getBean("Имя объекта экземпляра").【Имя свойства】'
Пример: запрос значения свойства объекта в контейнере Spring.
vmtool --action getInstances -c 7637f22 --className org.springframework.web.context.WebApplicationContext --express 'instances[0].getBean("gisqAuthenticationSuccessHandler").needUpdatePwdTime'
Возможные проблемы:
Вопрос 1. Обратитесь к официальному веб-сайту, чтобы напрямую скопировать org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named
vmtool --action getInstances --className org.springframework.context.ApplicationContext --express 'instances[0].getBean("gisqAuthenticationSuccessHandler")'
Не удалось выполнить ognl, сообщение об исключении: ognl.MethodFailedException: Метод "getBean" не выполнен для объекта org.springframework.context.annotation.AnnotationConfigApplicationContext@91161c7, запущен вторник, 07 февраля, 11:08:21 CST 2023 [org.springframework.beans.factory.NoSuchBeanDefinitionException: нет bean-компонента с именем 'gisqAuthenticationSuccessHandler'], пожалуйста, проверьте $HOME/logs /arthas/arthas.log для более подробной информации.
[Артас@1]$
Причина: в реальных проектах это часто веб-контейнер, поэтому полное имя класса контейнера необходимо изменить в соответствии с реальной ситуацией.
vmtool --action getInstances --className org.springframework.web.context.WebApplicationContext --express 'instances[0].getBean("gisqAuthenticationSuccessHandler")'
Вопрос 2: Получить текущий класс, загруженный загрузчиком классов
sc -d [целевой класс]
Пример:
sc -d com.gisquest.cloud.oauth2.authentication.GisqAuthenticationSuccessHandler