2012-12-17 60 views
0

對於標題很抱歉,但我不確定是否需要描述該問題。我有一個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) 

但我不知道可能是什麼原因造成的。

+0

檢查你的log4j.xml。方面的建議使用'Executors.newScheduledThreadPool'而不是Timers和TimerThreads –

回答

1

這意味着日誌記錄庫無法獲取記錄器。檢查記錄器配置。

0

它看起來像是有衝突的日誌框架實現類或缺少commons-logging.properties文件。儘管可以將調用混合到log4j,log4j 2,slf4j,commons-logging等API中,但您在依賴項中包含的類必須兼容。有一組類使用log4j作爲實現類的集合,還有另一組類使用log4j 2作爲底部的實現類。

https://bradleyaross.wordpress.com/2016/05/05/java-logging-frameworks/

如果你看一下在項目中的教程,log4j1和教程,log4j2模塊在http://www.github.com/bradleyross/tutorials,你會看到的建立例子爲每個類。

如果使用log4j的1.x的實現類,您將需要一個的log4j.xml文件,表明該消息被髮送到log4j的或相應的系統和JAR文件commons-logging.properties文件是 commons-測井1.2.jar 的log4j-1.2.17.jar 的log4j到SLF4J-2.0-beta4.jar

如果使用log4j的2實現文件中,我使用log4j2.xml和 共享記錄-1.2。罐子 的log4j-1.2-API-2.5.jar 的log4j-API-2.5.jar log4j的核-2.5.jar 的log4j-SLF4J-IMPL-2.5.jar(這消除了對commons-logging.pro需要perties)

http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-logging.html

唯一的jar文件常見的兩種套是共享記錄-1.2.jar。混合兩組中的任何其他文件將導致嚴重問題。 (由於我來自IBM的老手冊常說,結果是不確定的。)

log4j的1.x中不再支持

相關問題