Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Wildfly/JBOSS和持久计时器-在过去运行下一次时作业未启动_Java_Timer_Jboss_Wildfly - Fatal编程技术网

Java Wildfly/JBOSS和持久计时器-在过去运行下一次时作业未启动

Java Wildfly/JBOSS和持久计时器-在过去运行下一次时作业未启动,java,timer,jboss,wildfly,Java,Timer,Jboss,Wildfly,在多个wildfly环境中,我们有一个持久计时器(每分钟运行一次),其中数据存储是数据库类型(Oracle)。 一切似乎都正常工作,JBOSS_EJB_计时器是在部署期间创建的,每当一个服务器运行作业时,它都会正确更新 问题是,由于某种原因,JBOSS_EJB_计时器中的下一个_日期被设置为过去的日期(它发生在“脏”wildfly重新启动期间,以及数据库连接出现问题一段时间)-当下一个_日期过去时,作业似乎根本没有开始。另一件奇怪的事情是,尽管作业并没有运行,JBOSS_EJB_定时器表也并没有

在多个wildfly环境中,我们有一个持久计时器(每分钟运行一次),其中数据存储是数据库类型(Oracle)。 一切似乎都正常工作,JBOSS_EJB_计时器是在部署期间创建的,每当一个服务器运行作业时,它都会正确更新

问题是,由于某种原因,JBOSS_EJB_计时器中的下一个_日期被设置为过去的日期(它发生在“脏”wildfly重新启动期间,以及数据库连接出现问题一段时间)-当下一个_日期过去时,作业似乎根本没有开始。另一件奇怪的事情是,尽管作业并没有运行,JBOSS_EJB_定时器表也并没有更新,但我可以看到这个作业的定时器对象改变了它的下一个运行时间。 有人能告诉我该怎么做吗?最残酷的方法是运行另一个作业(不过,这个作业不需要是持久的,并且可以在多个节点上运行),它将检查此列中的值是否不在过去。这对我来说听起来很糟糕(检查另一个计划作业的计划作业…),但我无法思考/找到其他解决方案。我希望我只是忽略了日程表注释/wildfly设置中的一些内容,有人会给我指出正确的方向

以下是一些细节:

带着工作上课

@Startup
@Singleton
public class TestSchedule {

  private final Logger logger = LoggerFactory.getLogger(TestSchedule.class);

  public static final String NAME = "TestScheduleNameYay";


  @Schedule(minute = "*/1", hour = "*", info = NAME)
  public void test() {

    logger.debug("Some test...");

  }

}
以下是查询JBOSS_EJB_计时器表中某些列的结果(请注意,下一个日期是过去的):

由于date在过去,作业没有运行,但当我迭代计时器(从TimerService.getAllTimers()获得)时,我看到我的计时器具有正确的日期(从日志中提取):


提前谢谢

你找到解决这个问题的办法了吗?我也有同样的问题。不是,而是解决办法。似乎此问题仅适用于自动创建的计时器(即,在使用计划通知时)。我更改了代码,所以计时器是通过编程方式创建的(即使用TimerService)——以这种方式创建的计时器似乎不受此问题的影响(一旦db连接恢复,它们会正确更新,等等)。另外,在我的例子中,这并没有太多的工作(只是几行代码+测试)。请让我知道,如果你需要帮助如何创建定时器编程。谢谢您好@user1223183。谢谢你的回复。我想我也会选择程序化的创作。再次感谢
SELECT INITIAL_DATE, REPEAT_INTERVAL, NEXT_DATE, PREVIOUS_RUN, INFO, TIMER_STATE FROM JBOSS_EJB_TIMER;

,0,2017-06-07 14:22:00.000000,2017-07-06 14:06:51.935000,Az4ZRW1haWxTZW5kZXJTaW5nbGV0b25UaW1lcg==,ACTIVE
id=de67db05-e8d6-40aa-92f8-5e938ffd5eb2 timedObjectId=test-ear.test-ejb.TestSchedule auto-timer?:true persistent?:true timerService=org.jboss.as.ejb3.timerservice.TimerServiceImpl@c8ba408 initialExpiration=null intervalDuration(in milli sec)=0 nextExpiration=Thu Jul 06 14:32:00 CEST 20
17 timerState=ACTIVE info=TestScheduleNameYay]]