제목에 대해 유감스러운 점은 없지만 그 문제를 설명하는 데는 별다른 어려움이 없습니다. TimerTask를 확장하는 클래스가있는 SingletonBean이 있습니다. 요점은 응용 프로그램이 시작될 때 일정한 백그라운드 작업 세트를 루프에서 실행하기 시작한다는 것입니다. 언뜻보기에는 모든 것이 잘 작동합니다. 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)
이제 위와 같은 방법으로 트리거되는 오류입니다. 그러나 디버깅을 시도 할 때 클래스가 호출되지 않는다고 말합니다. 그것은 디버거에 나타나지 않으며, 특히 run()의 나머지 부분으로부터 60 초만큼 오프셋되지 않은 모든 계정에 의해 호출되어서는 안됩니다.
어쨌든 그 대답은 추적의 마지막 두 줄과 관련이 있다고 생각합니다.
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
그러나이 문제의 원인에 대해서는 잘 모릅니다.
당신의 log4j.xml을 확인 지원됩니다. Side suggestion은 Timers와 TimerThreads 대신에'Executors.newScheduledThreadPool'을 사용합니다. –