Ответ Александра Павлова работает для меня (хотя я настроил его, чтобы превратить его в файл Groovy). Чего мне не хватало, так это регистрации JobListener в планировщике.
Я зарегистрировал единичный экземпляр класса Александра RenameThreadWhenJobRunning как bean-компонент 'renameThreadJobListener'. Bean-компонент quartzScheduler уже существовал в контексте моего приложения.
Поскольку я использую Grails, вот блок из моих resources.groovy, который можно перенести в конфигурацию XML или подход на основе аннотаций:
quartzSchedulerInitializer(QuartzSchedulerInitializer) { bean ->
bean.dependsOn = ['quartzScheduler', 'renameThreadJobListener'] as String[]
quartzScheduler = ref('quartzScheduler')
renameThreadJobListener = ref('renameThreadJobListener')
}
renameThreadJobListener(RenameThreadWhenJobRunning)
Затем я создал следующий класс Groovy:
import org.quartz.impl.matchers.EverythingMatcher
import org.springframework.beans.factory.InitializingBean
/**
* At application startup, register job listeners on the QuartzScheduler bean.
*/
class QuartzSchedulerInitializer implements InitializingBean {
def quartzScheduler
def renameThreadJobListener
@Override
void afterPropertiesSet() throws Exception {
def matcher = EverythingMatcher.allJobs()
quartzScheduler.listenerManager.addJobListener(renameThreadJobListener, matcher)
}
}
Результат - имена моих рабочих потоков теперь выглядят как «com.example.MyJob-Qz1»!