У меня проблема, которая выглядит так, как будто она вызвана тем, что одновременно используются два экземпляра загрузчика классов. Запланированная задача всегда запускается дважды, а не один раз, даже с настройками, чтобы избежать одновременного использования.Как однозначно идентифицировать экземпляр загрузчика классов в Java
Как я могу однозначно идентифицировать экземпляр загрузчика класса для данного экземпляра класса во время выполнения? Я знаю, что его полное имя будет сочетаться с именем classloader, package и class. Я хочу знать, работают ли одновременно два отдельных экземпляра одного загрузчика классов.
Я попытался войти в систему, используя следующее, но это не дало мне ничего полезного с точки зрения того, что я на самом деле надеялся увидеть (что-то эквивалентное уникальному идентификатору потока и т. Д.). да, это дает тип загрузчика классов и его родительское имя, но этого недостаточно, чтобы помочь мне в этой проблеме.
final String classLoaderInfoCurrentThread = Thread.currentThread().getContextClassLoader().toString();
final String classLoaderInfoClass = getClass().getClassLoader().toString();
logger.debug("Class loader info current thread: " + classLoaderInfoClass);
logger.debug("Class loader info class: " + classLoaderInfoCurrentThread);
Результаты выше:
погрузчик класса Информация класс: WebappClassLoader
контекст:
делегата: ложные
хранилищ: /WEB-INF/классы/
----------> Родительский классl oader: [email protected]
Любые идеи, которые были оценены.
ОБНОВЛЕНИЕ:
Благодарим за обратную связь. Использование системного hashcode было достаточным для подтверждения того же загрузчика классов. Хэш на StandardClassLoader также был полезен ретроспективно, как это было сказано в комментариях. Я запустил проверку идентификаторов потоков, которые отличаются.
Использование Spring с Tomcat и каркасом Quartz 1.8.
Поднимая протоколирование на весну/Quartz, я могу определить, что два разных экземпляра планировщика быть запущен:
org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v1.8.6) 'scheduler' with instanceId '<compname>.local1375104695468'
org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v1.8.6) 'scheduler' with instanceId '<compname>.local1375104696411'
Оказывается есть известная проблема с этим:
Quartz job runs twice when deployed on tomcat 6/Ubuntu 10.04LTS
'68de123' должно быть достаточно для уникальной идентификации времени выполнения. – hexafraction