2017-11-03 2 views
2

Vor Jahren hatten wir ein Problem mit langsamer Federkomponente Scans im Standalone-Java-Anwendungen, damit ich in Stackoverflow gefragt: Slow spring component scan . Jahre später bin ich wieder über dieses Problem gestolpert und ich denke, ich habe herausgefunden, warum es langsam ist: Es ist, weil die JAR-Dateien signiert sind. Derzeit haben wir etwa 170 JAR-Dateien in unserer App. Unsere eigene und dritte Partei. Wir unterschreiben sie alle. Normalerweise verwenden wir Webstart und die Leistung für den Komponentenscan ist in Ordnung. Starten unserer App mit einem riesigen Klassenpfad, indem Sie einfach "java -cp mainclass" ausführen, der compountnt Scan dauert Minuten. Wenn ich nur die MANIFEST.MF-Dateien aus allen JAR-Dateien (die nur die Signierungsinformationen enthalten) entfernen und die Anwendung erneut ausführen, ist die Geschwindigkeit schnell wie bei Webstart. So scheint es die Signaturprüfung kostet eine sehr lange Zeit. Ich habe versucht, Signatur Scan in der Java-Konsole zu deaktivieren. Kein Effekt. Immer noch langsam. Gibt es Java-Laufzeitparameter?Federkomponente Scan (@Autowire) in signierter Jar Files langsam

+0

Der Vollständigkeit super schnell ist: welche Version und Anbieter von Java? (ex: Oracle Laufzeit, OpenJDK Build, ...) – Gimby

+0

Es ist std. Oracle JDK 8u141 und ich probierten andere (Immer Standard Oracle). Der gleiche Effekt die ganze Zeit – magicroomy

Antwort

0

Ich stoße zur Zeit auf das gleiche Problem mit einem signierten Uber-Jar. Es hat möglicherweise nichts mit der automatischen Verdrahtung zu tun, sondern mit dem Scannen von Kontextkomponenten, falls Sie dies auch in einer XML-Konfiguration verwenden. Ich habe einen alten Spring-Kern ticket gefunden, der das erwähnt. Das Ticket wurde mit Auflösung geschlossen: nicht behoben ...

Ich habe Komponente Scannen entfernt und ersetzte es mit XML-Bohnen und es scheint zu arbeiten. Ich habe immer noch Probleme mit CXF-Web-Services, die zur Laufzeit mit introspection (org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean) generiert werden. Jeder Dienst benötigt ungefähr 2 Minuten, um erstellt zu werden. Aber zumindest wurden einige Fortschritte gemacht.

Etwas anderes erwähnenswert: die Anwendung mit Java Web Start auf Java 9 langsam ist, obwohl es mit 1,8

Verwandte Themen