我对标题感到抱歉,但我不确定如何描述这个问题。我有一个带有扩展 TimerTask 的类的 SingletonBean。关键是,当应用程序启动时,它开始循环运行一组计划的后台任务。乍一看一切正常,Timer() 执行 run() 方法,并且计划的作业每 120 秒完美执行一次。
在 run() 内部,我有一个从 AWS DynamoDB 获取信息列表的方法。
List<SiteObj> sites = storedDynamoQueries.scanSite("uid");
这再次完美运行,并且正如我所期望的那样,我可以在该方法上放置一个中断,并在它执行时每 120 秒暂停一次,等待我跨过它。
现在解决问题!如上所述,定时器设置为每 120 秒执行一次。但是每 120 秒但偏移 60 秒。我收到如下错误:
SEVERE: Error wih Dynamo Site Scan
java.lang.NullPointerException
at org.apache.log4j.LogManager.getLogger(LogManager.java:179)
at org.apache.log4j.Logger.getLogger(Logger.java:94)
at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:289)
at org.apache.commons.logging.impl.Log4JLogger.debug(Log4JLogger.java:177)
at com.amazonaws.auth.AWS4Signer.sign(AWS4Signer.java:119)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:239)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:165)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:985)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.scan(AmazonDynamoDBClient.java:560)
at com.amazonaws.services.dynamodb.datamodeling.DynamoDBMapper.scan(DynamoDBMapper.java:1066)
at com.amazonaws.services.dynamodb.datamodeling.DynamoDBMapper.scan(DynamoDBMapper.java:1028)
at tv.tarka.dastraxweb.integration.dynamo.StoredDynamoQueries.scanSite(StoredDynamoQueries.java:1584)
at tv.tarka.dastraxweb.application.snmp.Scheduler$ScheduledTask.run(Scheduler.java:72)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
现在这是由与上述相同的方法触发的错误。但是当我尝试调试它时,系统说该类甚至没有被调用!它不会出现在调试器中,也不应该被所有帐户调用,尤其是不会从 run() 的其余部分偏移 60 秒。
无论如何,我怀疑答案与跟踪的最后两行有关。
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
但我不知道是什么原因造成的。