@SpringBootApplication
public class Application {
private static ConfigurableApplicationContext context;
public static void main(String[] args) {
context = SpringApplication.run(Application.class, args);
}
public static void restart() {
ApplicationArguments args = context.getBean(ApplicationArguments.class);
Thread thread = new Thread(() -> {
context.close();
context = SpringApplication.run(Application.class, args.getSourceArgs());
});
thread.setDaemon(false);
thread.start();
}
}
@RestController
public class RestartController {
@PostMapping("/restart")
public void restart() {
Application.restart();
}
}
在这个例子中,我们创建了一个新的非守护线程来重新创建上下文,这样我们可以防止由close方法触发的JVM关闭我们的应用程序。然后,我们添加了一个REST端点,通过它可以触发重启。
另外,Spring Boot Actuator的内置RestartEndpoint也可以用于重新启动应用程序1。但是,这需要在application.properties文件中启用内置的重启端点,并添加所需的Maven依赖项。
发布日期:
2023-11-15
更新日期:
2024-09-27
文章字数:
198
阅读时长:
1 分
阅读次数: