My application uses a Spring DefaultMessageListenerContainer to process incoming messages. The main method of the app already registers a shutdown hook.
Question is this: what is the best way to force the application context to shut down?
If I throw a RuntimeException in the message listener, it is handled by the container, and not passed on. Is calling System.exit acceptable? Do I pass along the ApplicationContext to every class that needs to shut down, so I can call close() on it?
You can cast your application context to
ConfigurableApplicationContextand callclose()on it. At least that’s what happens when the context is shut down in a web-application environment, in cases the servlet context is destroyed.If you want to get ahold of the
ApplicationContext, your bean may implementApplicationContextAwareAnother option is to inject (or autowire with
@Autowired) the application context: