Eine Back-End-Webanwendung wird auf einem Tomcat 6-Servlet-Container bereitgestellt. In der Webapp werden mehrere Überwachungsthreads gestartet. Das Problem ist beim Herunterfahren.Wie Sie lokale Threads, die zu einer Webanwendung gehören, die auf dem Tomcat ausgeführt wird, ordnungsgemäß beenden müssen
- Woher weiß ich, dass die Webanwendung zum Herunterfahren aufgefordert wird?
- Wie soll ich das in meinen Threads behandeln?
Derzeit ist mein Thread wie folgt implementiert. Wenn das Servlet angewiesen wird, herunterzufahren (shutdown.sh), führt es einen sauberen Shutdown durch und hängt nicht wegen dieses Threads - Warum?
class Updater extends Thread {
volatile boolean interrupted = false;
@Override
public void run() {
Integer lastUpdateLogId = CommonBeanFactory.getXXX()
.getLastUpdateLogRecordKey(MLConstants.SMART_DB_NAME);
List<UpdateLog> updateLogRecords;
while (!interrupted) {
boolean isConfigurationUpdateRequested = false;
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
setInterrupted(true);
}
updateLogRecords = CommonBeanFactory.getXXX()
.getLastFactsUpdateLogRecords(MLConstants.XXXX, lastUpdateLogId);
for(UpdateLog updateLog : updateLogRecords) {
if (updateLog.getTable_name().equals(MLConstants.CONFIG_RELOAD)) {
isConfigurationUpdateRequested = true;
}
lastUpdateLogId = updateLog.getObjectKey();
}
if (isConfigurationUpdateRequested) {
Configuration.getInstance().loadConfiguration();
}
}
}
public boolean getInterrupted() {
return interrupted;
}
public void setInterrupted(boolean interrupted) {
this.interrupted = interrupted;
}
}