I have troubles with running spring application in docker container (both spring and docker have latest versions in my environment). I want to have healthy life cycle for application class AnalysisServiceBootstrap: to run initialization code with method start() right AFTER creation of AnalysisServiceBootstrap and also to run method stop() right BEFORE destruction of AnalysisServiceBootstrap (I want to run stop() code when someone stops the application).
I have following code:
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);
}
}
For some reason I can not get method stop() running on docker stop. I tried several ways offered on stackoverflow and other resources, but all of them did not work for me.
I will be glad to have code that works for you (not just some vogue suggestions).
Here is almost exact docker file of mine:
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}
But you are invited to post here any working docker file that you have.
Thanks a lot.