1. Die zeitgesteuerten Federaufgaben werden zweimal ausgeführt
Problemreproduktion und Analyse
Kürzlich habe ich das Quarz -Timing -Task -Framework verwendet und festgestellt, dass es kein Problem mit der Ausführung der Entwicklungsumgebung gab. Nachdem ich es auf dem Server bereitgestellt hatte, stellte ich fest, dass die Aufgabe mehrfach gleichzeitig ausgeführt wurde. Nach der Suche stellte ich fest, dass es ein Problem mit der Tomcat -Konfigurationsdatei auf dem Server gab.
Die ursprüngliche Konfigurationsdatei - server.xml ist wie folgt:
<Host name = "localhost" appbase = "webapps" packwars = "true" autodeploy = "true"> <valve classname = "org.apache.catalina /></Host><Host name="www.xxx.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/usr/local/tomcat/apache-tomcat-8.5.9/webapps/xxxindex" reloadable = "true"> </context> </host>
Ein Host repräsentiert einen Container, der mehrere Kontexte (Anwendungen) enthalten kann. Die obige Konfigurationsdatei bedeutet: Zwei Container sind in Tomcat, einem Namen = localhost, konfiguriert, das Stammverzeichnis der Anwendung ist WebApps und das Kriegspaket wird automatisch dekomprimiert und automatisch bereitgestellt. Wenn der Kontext nicht angegeben ist, werden alle Webanwendungen im Stammverzeichnis bereitgestellt. Nach erfolgreicher Bereitstellung kann auf das externe Netzwerk über den Server -IP + -Projektnamen zugegriffen werden. Der andere Name = www.xxx.com, der sich vom ersten Host unterscheidet, ist mit der Webanwendung der Homepage konfiguriert und muss nicht mit dem Projektnamen zugegriffen werden. Nachdem die Bereitstellung erfolgreich ist, können Sie über den Domänennamen + Projektnamen darauf zugreifen, und auf das Projekt, auf dem sich die Startseite befindet, kann direkt über den Root -Domain -Namen zugegriffen werden.
Zu diesem Zeitpunkt tritt das Problem auf. Das Projekt, das die Zeitaufgaben enthält, wird im WebApps -Verzeichnis bereitgestellt. Zwei unabhängige Container in Tomcat werden einmal bereitgestellt, was dem Projekt entspricht, das zweimal auf dem Server auf Tomcat bereitgestellt wird. Beide Seiten werden gleichzeitig Zeitaufgaben ausgeführt, und dieselbe Datenbank wird angegeben.
Problemlösung
Um den normalen Zugang anderer Projekte nicht so weit wie möglich zu beeinflussen, habe ich daher einen Kompromiss eingereicht und gesagt, dass das Projekt, das Zeitaufgaben ausführen muss, separat in einem anderen Ordner wie Webroot bereitgestellt wird und dann nur den Domain -Namenshost verwendet wird. Nachdem die Konfigurationsdatei geändert wurde, ist Folgendes wie folgt:
<Host name = "localhost" appbase = "webapps" packwars = "true" autodeploy = "true"> <valve classname = "org.apache.catalina /> </Host> <host name = "www.xxx.com" appbase = "" packwars = "true" autodeploy = "true" xmlvalidation = "false" xmlnameSpaceaware = "false"> <context path = "docbase ="/usr/ush. reloadable="true"></Context> <Context path="/projectA" docBase="/usr/local/tomcat/apache-tomcat-8.5.9/webapps/projectA" reloadable="true"></Context> <Context path="/projectB" docBase="/usr/local/tomcat/apache-tomcat-8.5.9/webapps/projectB" reloadable = "true"> </context> <context path = "/projectc" docbase = "/usr/local/tomcat/apache-tomcat-8.5.9/webroot/projectc" reloadable = "true"> </context> </host>
Sie können sehen, dass ProjectC ein Projekt ist, das Zeitaufgaben enthält. Nach erfolgreicher Bereitstellung, mit Ausnahme des Projekts, auf das nur über den Domain -Namen zugegriffen werden kann, bleibt die Zugriffsmethode der anderen Projekte gegenüber zuvor unverändert. Gleichzeitig wird das Problem gelöst und die Zeitaufgabe wird nur einmal ausgeführt.
Ein weiteres Sprichwort online
<Host name = "localhost" appbase = "webapps" packwars = "true" autodeploy = "true"> <context docbase = "projecta" path = "" reloadable = "true" /> < /host>
Es gibt nur einen Host. Wenn Tomcat gestartet wird, werden alle Projekte im Root -Verzeichnis einmal bereitgestellt, und dann wird der Kontext erneut bereitgestellt, wodurch auch die Zeitaufgabe zweimal ausgeführt wird.
Es gibt viele Lösungen für dieses Problem:
2. Das Problem der langsamen Tomcat -Bereitstellung
Der von mir verwendete Alibaba -Cloud -Server war bei der Bereitstellung von Tomcat sehr langsam, aber die neue Alibaba -Cloud, die ich später gekauft habe, hatte dieses Problem nicht. Nachdem das Projekt eingesetzt wurde, wird es sein
Info [localhost-startStop-1] org.apache.catalina.startup.hostconfig.deployDirectory Bereitstellung von Webanwendungsverzeichnissen /opt/apache-tomcat-8.0.15-server/webapps/root
Es dauert einige Minuten, um hier fortzufahren. Früher war ich der Meinung, dass es sich um den Serverkonfigurationsgrund handelte, aber später stellte ich versehentlich fest, dass es sich um den JRE -Konfigurationsgrund handelte. Nachdem ich mich auf mehrere Blogs bezogen hatte, stellte ich fest, dass Oracle Gründe und Lösungen in der Dokumentation von Weblogic ansah.
Die Bibliothek, die für die Zufallszahlengenerierung in Suns JVM verwendet wird, basiert standardmäßig für UNIX -Plattformen auf /dev /random. Dies kann möglicherweise den Weblogic SIP -Serverprozess blockieren, da auf einigen Betriebssystemen /Dev /Random darauf wartet, dass eine bestimmte Menge an "Rauschen" auf dem Host -Computer generiert wird, bevor ein Ergebnis zurückgegeben wird. Obwohl /dev /random sicherer ist, empfiehlt Bea, /dev /urandom zu verwenden, wenn das Standard -JVM -Konfiguration das Weblogic SIP -Server -Start verzögert.
Bedeutung:
Änderungsmethode:
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.