Как запустить планировщик EJB параллельно - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь запустить методы poll, poll1, poll2 для запуска независимо, прямо сейчас, если poll () работает и время обработки занимает более 10 секунд, другие методы ждут, пока poll () завершит свою обработку,Я сохранил точку останова на poll () sys out, а другие методы sys out не выполняются.Как это решить?Ниже приведена база кода.

Также я попытался добавить

@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Lock(LockType.READ)

, но не обнаружил никаких изменений в поведении.

@Singleton
public class SchedulerA {

    @Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
    public void poll() {
        System.out.println("SchedulerA:: poll()");
    }

    @Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
    public void poll1() {
        System.out.println("SchedulerA:: poll()1");

    }

    @Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
    public void poll2() {
        System.out.println("SchedulerA:: poll()2");

    }

}

Я ожидаю, если poll ()работает (поставьте точку останова / или добавьте цикл for, который занимает более 10 секунд) выходные данные show SchedulerA :: poll () 1 SchedulerA :: poll () 2 через 10 секунд снова SchedulerA :: poll () 1 SchedulerA ::опрос () 2

1 Ответ

0 голосов
/ 01 мая 2019

Может быть, какой-то обходной путь должен использовать ManagedScheduledExecutorService .Используйте его, введя так:

@Resource
private ManagedScheduledExecutorService scheduledExecutorService;

и запланируйте выполнение задач в @PostConstruct выше с фиксированной задержкой, например,

scheduledExecutorService.scheduleWithFixedDelay(this::poll, 1, 10, TimeUnit.SECONDS);

и т. Д.

...