春ブーツ2.1とJava 11におけるビーンのライフサイクル

I. Christoffersenのとれ:

アプリケーションは春ブート2.0.4とJava 8で構築されており、ドッカー/ドッカー作曲で実行されたときに私のプロジェクトはJavaの11で春ブーツ2.1.0へのJava 8で春ブーツ2.0.4から移行され、@PostConstruct-annotated方法でした呼ばれるが、春のブート2.1.0とJavaの11への移行後@PreDestroy-annotatedメソッドが呼び出されなくなりました。

私は実装に注釈からの切り替えしようとしているInitializingBeanDisposableBean説明したように、ここではなく、DisposableBean.destroyメソッドが呼び出されません。

私も同じ結果で、javax.annotation-APIバージョン1.3.2への依存関係を追加しようとしています。

再現方法:

ライフサイクル豆と最小限のSpringアプリケーションを作成します。

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

@Component
public class Life implements InitializingBean, DisposableBean {
    @Override
    public void destroy() throws Exception {
        System.out.println("--- Life.shutdown");
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("--- Life.startup");
    }
}

ターゲットサブフォルダからSpringアプリケーションを起動します。

cd target
java -jar demo-0.0.1-SNAPSHOT.jar

アプリケーションはCtrlキー+ Cを使用して停止した場合、DisposableBean.destroyが呼び出されます。

親フォルダに戻ります:

cd ..

Mavenを使ってSpringアプリケーションを起動します。

mvn spring-boot:run

アプリケーションはCtrlキー+ Cを使用して停止した場合、DisposableBean.destroyが呼び出されます。

Dockerfile:

FROM openjdk:11.0.1-jre-slim
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT java -jar /app.jar

ビルド、実行、および停止ドッカーの画像:

docker build -t demo .
docker run -p 8080:8080 demo
docker ps
docker stats 3ca5b804ab13
docker stop 3ca5b804ab13
docker logs 3ca5b804ab13

アプリケーションがドッキングウィンドウの停止を使用して停止した場合、DisposableBean.destroyは呼び出されません。

ドッカー-compose.yml:

demo:
  image: demo
  ports:
  - '8080:8080'

ドッカー作曲を(OpenShiftをシミュレート)を使用して、ドッカーイメージを実行します。

docker-compose up
docker-compose down
demo_demo_1 exited with code 137

アプリケーションがドッキングウィンドウ・コンダウンを使用して停止した場合、DisposableBean.destroyは呼び出されません。

私は、コンテナが殺される前に、10秒の遅延があるので、それは、SIGKILLを発行する前にドッカーがSIGTERMをしようとしていると思われます。

I. Christoffersenのとれ:

私は(溶液見つけたと思う、このブログのエントリを使用するexecのフォームの代わりに、シェル形Dockerfileで非常にドッカー問題そのSIGTERMはjavaプロセスに当たることはなく、任意の子プロセスにはない前方の信号処理を行い、bashのプロセスを(:) )。

  • (/ binに/ SH -Cシェルで実行される)シェル型: ENTRYPOINT java -jar /app.jar
  • (シェルなしで実行)Execの形態: ENTRYPOINT ["java", "-jar", "/app.jar"]

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=191082&siteId=1