Я ищу библиотеку, которая позволяет мне делать
- определить работника, который будет вызываться один раз в определенное время в будущем (не требуется переупорядочение / cron-подобный подвиг), т.е. таймер
- Работник должен принять контекст с некоторыми параметрами / входами
- все должно быть постоянным в БД (или файле) рабочего
- Работник должен управляться весной - весна должна создавать экземпляр работника, чтобы в него можно было вводить зависимости
- иметь возможность динамически создавать таймеры с помощью API, а не только статически с помощью пружинных XML-компонентов
приятно иметь:
- поддерживает кластер, т.е. имеет несколько узлов, на которых может размещаться работник. каждое хранилище заданий в БД будет вызывать ОДНУ работу на одном из узлов
Я рассмотрел несколько альтернатив, ни один из которых не соответствует требованиям:
при использовании org.springframework.scheduling.quartz.JobDetailBean заставляет кварц создавать ваш рабочий экземпляр (а не к весне), чтобы вы не могли получить инъекцию зависимости (что приведет меня к использованию Service Locator, которого я хочу избежать)
при использовании org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean вы не можете получить контекст. ваш Worker предоставляет один открытый метод, который не принимает аргументов. Кроме того, при использовании MethodInvokingJobDetailFactoryBean вы не можете использовать постоянство (формировать Javadoc)
Примечание: JobDetails, созданные с помощью этого FactoryBean, не сериализуются и поэтому не подходят для постоянных хранилищ заданий. Вам нужно реализовать свое собственное Кварцевое задание в качестве тонкой оболочки для каждого случая, когда вы хотите, чтобы постоянное задание передавалось определенному методу обслуживания.
- Таймер Spring и простые JDK-таймеры не поддерживают функцию сохранения / кластеризации
Я знаю, что могу сам себя использовать, используя DB и Spring (или даже JDK) таймеры, но для этого я предпочитаю использовать стороннюю библиотеку.
Есть предложения?