有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java@Schedule在随机时刻执行

我在wildfly中运行了一些代码:

@Stateless
public class OrderStatusMonitorScheduler {

    @Inject
    private OrderEntityDao orderEntityDao;

    @Inject
    private TradeAgentClientSender tradeAgentClientSender;

    @Schedule(second="*/1", minute="*", hour="*", persistent = false)
    public void queryOrderStatusesBatch() {
        log.debug("queryOrderStatusesBatch start");
        ....
    }
}

有时调度程序每秒执行一次,但有时在将“queryOrderStatusesBatch start”写入日志文件之间有15-30秒的时间间隔。有时,后续呼叫之间的频率更高(每秒数次)。原因可能是什么?我是不是遗漏了什么?提前谢谢你的回答


共 (1) 个答案

  1. # 1 楼答案

    方法queryOrderStatusesBatch中的逻辑有多耗时?我认为这种方法在两次调用之间保持15-30个静默期的原因可能是线程数有限。计时器服务使用线程池来运行计划任务。如果@Schedule注释的方法中的逻辑非常耗时,并且经常执行,那么下一次调用可能不会发生,因为没有空闲线程来运行任务。 计时器服务线程池可以通过应用服务器中的管理控制台进行配置

    关于后续调用之间更高的自由度,原因可能是与@Schedule注释方法关联的事务回滚。在这个示例中,您给出的方法queryOrderStatusesBatch的事务类型是REQUIRED。如果您在那里实现的逻辑抛出异常,则事务将自动回滚。此外,容器必须重试超时方法