0

タイトルについては申し訳ありませんが、問題を説明する他の方法がわかりません。TimerTaskを拡張するクラスを持つSingletonBeanがあります。重要なのは、アプリケーションが起動されると、スケジュールされた一連のバックグラウンドタスクの実行をループで開始することです。一見すべてが正常に機能し、Timer()はrun()メソッドを実行し、スケジュールされたジョブは120秒ごとに完全に実行されます。

run()内には、AWSDynamoDBから情報のリストを取得するメソッドがあります。

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秒オフセットされていない必要があります。

とにかく、答えはトレースの最後の2行と関係があるのではないかと思います。

at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

しかし、何がこれを引き起こしているのか私にはわかりません。

4

2 に答える 2

1

これは、ロギングライブラリがロガーを取得できないことを意味します。ロガーの構成を確認してください。

于 2012-12-17T15:10:17.603 に答える
0

競合するロギングフレームワーク実装クラスがあるか、commons-logging.propertiesファイルが欠落しているようです。log4j、log4j 2、slf4j、commons-loggingなどのAPIへの呼び出しを混在させることができますが、依存関係に含めるクラスには互換性がなければなりません。実装クラスのセットとしてlog4jを使用するクラスのセットがあり、下部に実装クラスとしてlog4j2を使用するクラスの別のセットがあります。

https://bradleyaross.wordpress.com/2016/05/05/java-logging-frameworks/を参照してください

http://www.github.com/bradleyross/tutorialsにあるプロジェクトのtutorials-log4j1モジュールとtutorials-log4j2モジュールを見ると、各クラスの設定例が表示されます。

log4j 1.x実装クラスを使用する場合は、log4j.xmlファイル、メッセージがlog4jまたは適切なシステムに送信され、jarファイルがcommons-logging-1.2.jarであることを示すcommons-logging.propertiesファイルが必要になります。 log4j-1.2.17.jar log4j-to-slf4j-2.0-beta4.jar

log4j 2実装ファイルを使用する場合は、log4j2.xmlとcommons-logging-1.2.jar log4j-1.2-api-2.5.jar log4j-api-2.5.jarlog4j-core-2.5.jarlog4j-slf4j-impl-を使用しました。 2.5.jar(これにより、commons-logging.propertiesが不要になります)

http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-logging.htmlを参照してください

両方のセットに共通する唯一のjarファイルはcommons-logging-1.2.jarです。2つのセットの他のファイルを混在させると、大きな問題が発生します。(IBMの古いマニュアルが言っていたように、結果は未定義です。)

log4j1.xはサポートされなくなりました

于 2016-05-22T19:11:42.070 に答える