我在運行docker容器中的spring應用程序時遇到了麻煩(spring和docker在我的環境中都有最新版本)。我想爲應用程序類創建健康的生命週期AnalysisServiceBootstrap:使用start()方法運行初始化代碼在創建AnalysisServiceBootstrap之後運行方法stop()正確運行之前AnalysisServiceBootstrap(我想在運行stop()代碼時運行有人停止應用程序)。運行SpringBootApplication PostConstruct和PreDestroy
我有下面的代碼:
package com.pack;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
@SpringBootApplication
public class AnalysisServiceBootstrap {
// called OK on docker "start <containerId>"
@PostConstruct
public void start() throws Exception {
// some init code
}
// NOT called on "docker stop <containerId>"
@PreDestroy
public void stop() {
// some destroy code
}
public static void main(String[] args) {
SpringApplication.run(AnalysisServiceBootstrap.class, args);
}
}
出於某種原因,我不能停止的方法()在泊塢窗上停止運行。 我嘗試了幾種方法提供在stackoverflow和其他資源,但他們都沒有爲我工作。
我會很高興有代碼適合你(不只是一些時尚建議)。
這裏是我的幾乎確切搬運工文件:
FROM *********:6556/service-jvm
ARG SERVICE_JAR_FILE
ENV SERVICE_NAME service
ENV HTTP_PORT 603
ENV HTTPS_PORT 604
ENV SERVICE_JAR /opt/my/project/${SERVICE_JAR_FILE}
EXPOSE ${HTTP_PORT} ${HTTPS_PORT}
COPY ${SERVICE_JAR_FILE} /opt/my/project/${SERVICE_JAR_FILE}
CMD java -Xms1024m -Xmx1024m -dump:"/opt/my/project/dumppath" -javaagent:/opt/my/project/agent.jar -Djav.awt.headless=true -jar ${SERVICE_JAR}
你被請在這裏發表您有任何工作泊塢窗文件。
非常感謝。
添加您的Dockerfile並顯示您如何創建容器(gradle或maven) –
請不要添加其他信息作爲註釋,而是編輯您的問題。 –
用'exec'前綴'java'命令以便'CMD exec java'這應該使它成爲應該接收信號的後臺進程。否則它作爲一個正常的bash過程運行,不會收到信號。另請參閱https://www.ctl.io/developers/blog/post/gracefully-stopping-docker-containers/ –