同じ Tomcat で実行されている 2 つの別々の戦争で Amazon S3 SDK を使用しています。Spring サービスの 1 つの @PostConstruct で AmazonS3Client を初期化します。
これらの戦争を別々に実行すると、通常はすべて正常に動作します。それらを一緒に実行すると、そのうちの 1 つ (2 番目に起動するもの) が次の例外をスローします。
com.amazonaws.AmazonClientException: XMLReader の sax ドライバーを初期化できませんでした
これが発生した場合、AmazonClientException をキャッチした後、次のシステム プロパティを設定する回避策があります。
try {
init();
} catch (AmazonClientException ase) {
System.setProperty("org.xml.sax.driver", "com.sun.org.apache.xerces.internal.parsers.SAXParser");
init();
}
しかし、これはもちろん恐ろしいことです。これを行うより良い方法はありますか?これらの状況でなぜこれが発生するのですか?
更新: 最初は、AmazonS3Client の初期化を @PostConstruct から移動し、遅延して初期化すると、このエラーが完全に防止されたように見えました。しかし、どうやらそれは時々発生するようです - 私が両方ではなく一方の戦争だけを実行したとしても。