后端 web 应用程序部署在 Tomcat 6 servlet 容器上。在 webapp 中,启动了几个监控线程。问题在于关机。
- 我怎么知道 webapp 被请求关闭?
- 我应该如何在我的线程中处理这个?
目前我的线程实现如下。当 servlet 被指示关闭 (shutdown.sh) 时,它确实完成了干净的关闭并且不会因为这个线程而挂起——为什么?
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;
}
}