我使用Spring Boot并且我有一个用例可以上传一个应该重启应用程序的文件(因为在创建多个bean时使用了用户的上传) 。我知道我可以避免重新启动应用程序,但此刻 - 这就是我想要的。
我在Spring-Cloud项目中找到了RestartEndpoint,但似乎没有ApplicationPreparedEvent
被解雇。有没有其他方法可以通过编程方式重启Spring Boot应用程序?
答案 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。