對於標題很抱歉,但我不確定是否需要描述該問題。我有一個SingletonBean和一個擴展TimerTask的類。重點在於,當應用程序啓動時,它開始在循環中運行一些預定的後臺任務。一切正常,Timer()執行run()方法,計劃任務每120秒完成一次。TimerTask生成錯誤,無需執行
run()我有一個方法從AWS DynamoDB獲取信息列表。
List<SiteObj> sites = storedDynamoQueries.scanSite("uid");
同樣,這完美的作品,並預期在我的IDE,我可以把對方法的突破,並暫停每隔120秒時,它執行等着我去跨過它。
現在的問題!如上所述,定時器設置爲每120秒執行一次。然而每隔120秒但是OFFSET減少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)
現在,這是由上述相同的方法觸發的錯誤。但是當我嘗試調試它時,系統說這個類甚至沒有被調用!它不會出現在調試器中,它不應該被所有帳戶調用,尤其是不會被其餘運行()的60秒偏移。
無論如何,我懷疑答案跟跟蹤的最後兩行有關。
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
但我不知道可能是什麼原因造成的。
檢查你的log4j.xml。方面的建議使用'Executors.newScheduledThreadPool'而不是Timers和TimerThreads –