Ich habe eine Klasse implementiert ServletContextListener
, die beim Start einige Ressourcen lädt.
Diese Ressourcen sind so wichtig für die Anwendung, dass ich den gesamten Startvorgang versagen möchte, wenn in meiner Logik ein schlechtes Ereignis eintritt.
Gibt es einen Befehl, den ich innerhalb der Methode ServletContextListener.contextInitialized()
ausführen kann, um den gesamten Tomcat-Start zu stoppen und fehlzuschlagen?
Geben Sie Folgendes an:
%Vor% in Ihren java
Laufzeitoptionen unter Angabe der offiziellen Dokumentation :
Wenn der Wert true ist, wird der Server beendet, wenn während der Initialisierungsphase des Servers eine Ausnahme auftritt.
Wenn nicht angegeben, wird der Standardwert false verwendet.
UPDATE:
Wenn Sie das mit Code machen wollen, funktioniert System.exit()
?
Sie können dekorator verwenden, um vorhandene Listener zu umhüllen, ohne sie zu überladen. Nicht sicher, wie Tomcat reagieren wird ...
Wenn Sie Tomcat stoppen möchten, weil Ihre Webanwendung nicht bereitgestellt werden konnte, nehme ich an, dass Sie keine anderen Apps für Tomcat bereitgestellt haben. Warum bauen Sie diese App dann nicht als eigenständige Webanwendung mit integriertem Tomcat / Jetty? Auf diese Weise wird der eingebettete Server auch heruntergefahren, solange Ihre Webanwendung nicht ordnungsgemäß gestartet wird.
Für mich sieht es so aus, als ob Sie sich auf ServletContextListener
konzentrieren, um ein Problem anzugehen, für das ServletContextListener
nicht gedacht ist.
Verwenden Sie nicht System.exit()
, weil dadurch der Server zum Absturz gebracht wird, der möglicherweise andere bereitgestellte Apps ausführt. Wenn es in Ordnung ist, weil Sie wissen, dass es nie andere Apps geben wird (und Sie nicht wollen), dann erstellen Sie eine eigenständige Webanwendung. Diese schlechte Praxis wird in CWE als mögliche Schwäche aufgeführt: CWE-382
Nur ein Hinweis: Spring Boot erleichtert den Aufbau einer eigenständigen Webapp mit integriertem Server. Siehe dieses Handbuch: Ссылка
Guter Artikel, der erklärt, warum Sie wahrscheinlich danach suchen: Ссылка