Restarting Spring Boot Application !
- Using spring-boot-devtools
- Using RestartEndPoint from
Add your Gradle dependency
dependencies{
compileOnly("org.springframework.boot:spring-boot-devtools")
}
After that Add, you can simply add an end poing on your controller class and have the following:org.springframework.boot.devtools.restart.Restarter.getInstance().restart();
The drawback of using tools is you cannot make a good used of @Cacheable . it might cause ClassCastException while reading from the cache.
Add your Gradle dependency
dependencies{
compile "org.springframework.boot:spring-boot-starter-actuator"
}
After that Add, you can simply add an end on your controller class and have the following:- @Autowired
- RestartEndpoint restartEndpoint;
- And call the following methond from your controller :
- restartEndpoint.restart()
You might see NullPointer Exception while trying to bring the application up specially when you have UnderTow as your servlet container
- 3. And the third one is reading the current context and restarting it. You can simply add the following method on the Main Class and invoke from your controller
public static void restart() { ApplicationArguments args = appContext.getBean(ApplicationArguments.class); Thread thread = new Thread(() -> { appContext.close(); SpringApplication springApplication = new SpringApplication(MyBootApplication.class); springApplication.addListeners(new ApplicationPidFileWriter()); appContext =springApplication.run(args.getSourceArgs()); }); thread.setDaemon(false); thread.start(); }