以编程方式重启Spring Boot应用程序

时间:2015-03-18 08:37:11

标签: spring spring-boot

我使用Spring Boot并且我有一个用例可以上传一个应该重启应用程序的文件(因为在创建多个bean时使用了用户的上传) 。我知道我可以避免重新启动应用程序,但此刻 - 这就是我想要的。

我在Spring-Cloud项目中找到了RestartEndpoint,但似乎没有ApplicationPreparedEvent被解雇。有没有其他方法可以通过编程方式重启Spring Boot应用程序?

3 个答案:

答案 0 :(得分:4)

通过在Spring ApplicationContext上调用refresh()方法来实现此目的的最简单方法。这将杀死并重新加载所有bean,因此您应该确定只有在应用程序安全的情况下才会发生这种情况。

答案 1 :(得分:3)

我有一个特殊情况,我的Linux上运行的Spring Boot应用程序需要以root运行。

由于我将应用程序作为systemd服务运行,我可以像这样重新启动它:

Runtime.getRuntime().exec(new String[] { "/bin/systemctl", "restart", "foo" });

如果您的应用程序(希望)不需要以root运行,则可以使用setuid包装脚本,或者更好,使用sudo

检查这个答案:

https://superuser.com/questions/440363/can-i-make-a-script-always-execute-as-root

答案 2 :(得分:1)

在您的情况下,可以使用/ refresh端点(请参阅http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_endpoints)并使用@RefreshScope注释依赖于已更改配置的bean。