我在使用 Wildfly 10 时也遇到了同样的问题。
由于 @Schedule 只是一种将隐式 EJB 计时器与 @Timeout 方法打包在一起的简短方法,因此所有其他 EJB 计时器限制均适用。
我不是 EJB 方面的专家,但似乎有一个默认超时,当 @Schedule 方法预计完成时 - 这看起来很短(即只有几分钟)。
此外 - 从经验证据来看 - 看起来如果达到超时,它会尝试再次触发该方法(因此在第一次运行终止后进行第二次运行)。
我读到您可以直接在 JBoss 中配置默认超时,但这对我来说没有选择 - 所以我没有坚持这个领导(JBoss事务超时设置?).
我所做的是手动设置 @Schedule 方法的超时。
由于 Wildfly 10 默认使用 EJB3,因此请确保使用 EJB3 版本的 TransactionTimeout 注释。
如果尚未隐式,请将以下内容添加到您的 pom.xml 中:
<dependency>
<groupId>org.jboss.ejb3</groupId>
<artifactId>jboss-ejb3-ext-api</artifactId>
<version>2.2.0.Final</version>
<scope>provided</scope>
</dependency>
现在您可以为 @Schedule 方法设置超时,例如:
import org.jboss.ejb3.annotation.TransactionTimeout:
@Schedule(hour="5", minute="10", dayOfWeek="Mon-Fri",
dayOfMonth="*", month="*", year="*", info="MyTimer", persistent=false)
@TransactionTimeout(value = 23, unit = TimeUnit.HOURS)
private void scheduledTimeout(final Timer t) {