Мне нужен совет по следующим вопросам:вручную вызвать метод @Scheduled
У меня есть метод @Scheduled сервиса, который имеет fixedDelay пару секунд, в котором он делает сканирование очереди работ и обработку apropriate работы если он найдет. В той же службе у меня есть метод, который помещает работу в рабочую очередь, и я хотел бы, чтобы этот метод немедленно запускал проверку очереди после ее завершения (поскольку я уверен, что теперь будет некоторая работа для сканера) во избежание задержки до запланированных пинков (поскольку это могут быть секунды, а время несколько критично).
Функция «триггер теперь» в подсистеме «Выполнение задачи и подзарядки» была бы идеальной, которая также могла бы сбрасывать fixedDelay после того, как выполнение было инициировано вручную (так как я не хочу, чтобы мое ручное исполнение сталкивалось с запланированным). Примечание: работа в очереди может поступать из внешнего источника, поэтому требуется периодическое сканирование.
Любые советы приветствуются
Edit: Очередь хранится в документе на основе БД, так локальных решений на основе очередей не подходят.
Решение Я не вполне доволен (не очень нравится использование сырьевых потоков) бы что-то вроде этого:
@Service
public class MyProcessingService implements ProcessingService {
Thread worker;
@PostCreate
public void init() {
worker = new Thread() {
boolean ready = false;
private boolean sleep() {
synchronized(this) {
if (ready) {
ready = false;
} else {
try {
wait(2000);
} catch(InterruptedException) {
return false;
}
}
}
return true;
}
public void tickle() {
synchronized(this) {
ready = true;
notify();
}
}
public void run() {
while(!interrupted()) {
if(!sleep()) continue;
scan();
}
}
}
worker.start();
}
@PreDestroy
public void uninit() {
worker.interrup();
}
public void addWork(Work work) {
db.store(work);
worker.tickle();
}
public void scan() {
List<Work> work = db.getMyWork();
for (Work w : work) {
process();
}
}
public void process(Work work) {
// work processing here
}
}
Пожалуйста, голосование за эту проблему: https://jira.spring.io/browse/SPR-14562, чтобы создать простой способ сделать это. – crm86