如何并行运行EJB调度程序

问题描述 投票:0回答:1

我正在尝试运行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()正在运行(放置一个断点/或添加一个超过10秒的for循环)输出show SchedulerA :: poll()1 SchedulerA :: poll()2再次10秒后SchedulerA :: poll()1 SchedulerA :: poll()2

java ejb scheduler
1个回答
0
投票

也许一些解决方法是使用ManagedScheduledExecutorService。通过这样注入使用它:

@Resource
private ManagedScheduledExecutorService scheduledExecutorService;

并在@PostConstruct中安排上述任务以固定延迟执行,例如

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

等等

© www.soinside.com 2019 - 2024. All rights reserved.