Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Spring boot: Registering shutdown hook with the JVM

By implementing 'org.springframework.boot.ExitCodeGenerator' interface, you can return a specific exit code when SpringApplication.exit() is called.

Applicaton.java
package com.sample.myApp;

import org.springframework.boot.ExitCodeGenerator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Application implements ExitCodeGenerator {

public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);

System.out.println("Closing Application Context");

int exitCode = SpringApplication.exit(applicationContext);

System.out.printf("Application Context is exited with : %d", exitCode);

}

@Override
public int getExitCode() {
System.out.println("Returning exit code");
return 10;
}
}

When you ran above application, you can able to see below message in the console.

Closing Application Context
Returning exit code
Application Context is exited with : 10

You can also attach exit code generator using @Bean annotation like below.

Application.java
package com.sample.myApp;

import org.springframework.boot.ExitCodeGenerator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Application {

public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);

System.out.println("Closing Application Context");

int exitCode = SpringApplication.exit(applicationContext);

System.out.printf("Application Context is exited with : %d", exitCode);

}

@Bean
public ExitCodeGenerator exitCodeGenerator() {
return new ExitCodeGenerator() {

@Override
public int getExitCode() {
System.out.println("Returning exit code");
return 10;
}

};
}

}


You can rewrite the same using lambda expression like below.
package com.sample.myApp;

import org.springframework.boot.ExitCodeGenerator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Application {

public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);

System.out.println("Closing Application Context");

int exitCode = SpringApplication.exit(applicationContext);

System.out.printf("Application Context is exited with : %d", exitCode);

}

@Bean
public ExitCodeGenerator exitCodeGenerator() {
return () -> {
System.out.println("Returning exit code");
return 10;
};

}

}

How the application behaves on multiple exit code generators?
In the case of multiple exit codes,  all the exit code generators will be executed, but the highest value will be used (or if all values are negative, the lowest value will be used).
Application.java
package com.sample.myApp;

import org.springframework.boot.ExitCodeGenerator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Application {

public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);

System.out.println("Closing Application Context");

int exitCode = SpringApplication.exit(applicationContext);

System.out.printf("Application Context is exited with : %d", exitCode);

}

@Bean
public ExitCodeGenerator exitCodeGenerator10() {
return () -> {
System.out.println("Returning exit code 10");
return 10;
};

}

@Bean
public ExitCodeGenerator exitCodeGenerator5() {
return () -> {
System.out.println("Returning exit code 5");
return 5;
};

}

@Bean
public ExitCodeGenerator exitCodeGenerator35() {
return () -> {
System.out.println("Returning exit code 35");
return 35;
};

}
}


Previous                                                 Next                                                 Home


This post first appeared on Java Tutorial : Blog To Learn Java Programming, please read the originial post: here

Share the post

Spring boot: Registering shutdown hook with the JVM

×

Subscribe to Java Tutorial : Blog To Learn Java Programming

Get updates delivered right to your inbox!

Thank you for your subscription

×