バックエンドWebアプリケーションは、Tomcat 6サーブレットコンテナにデプロイされています。 webappでは、いくつかの監視スレッドが開始されます。シャットダウンに問題があります。tomcatで実行中のWebアプリケーションが所有するローカルスレッドを正しくシャットダウンする方法
- ウェブアプリケーションのシャットダウンが要求されていることをどのように知ることができますか?
- スレッドでこれをどのように処理する必要がありますか?
現在、私のスレッドは以下のように実装されています。サーブレットがシャットダウン(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;
}
}