我正在使用Sping Boot ,我有一个用例,其中用户可以上传一个文件,这应该会导致应用程序重启(因为用户的上传是在创建多个bean期间使用的)。我知道我可以避免重启应用程序,但目前-这是我想要的。
我在Spring-Cloud项目中发现了RestartEndpoint,但是它似乎没有被激发。有没有其他方法可以通过编程重新启动 Boot 应用程序?
我正在使用Sping Boot ,我有一个用例,其中用户可以上传一个文件,这应该会导致应用程序重启(因为用户的上传是在创建多个bean期间使用的)。我知道我可以避免重启应用程序,但目前-这是我想要的。
我在Spring-Cloud项目中发现了RestartEndpoint,但是它似乎没有被激发。有没有其他方法可以通过编程重新启动 Boot 应用程序?
4条答案
按热度按时间o4hqfura1#
最简单的方法是在Spring ApplicationContext上调用
refresh()
方法。这将终止并重新加载所有bean,因此您应该确保仅在应用程序安全的情况下才执行此操作。wribegjk2#
我有一个特殊的情况,其中我的Sping Boot 应用程序(在
Linux
上运行)需要作为root
运行。由于我将应用程序作为
systemd
服务运行,因此可以如下所示重新启动它:如果您的应用程序(希望如此)不需要以
root
运行,则可以使用setuid
Package 脚本,或者更好地使用sudo
。请检查以下答案,了解如何做到这一点:
https://superuser.com/questions/440363/can-i-make-a-script-always-execute-as-root
6yt4nkrj3#
在您的情况下,可能可以使用/refresh端点(请参阅http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_endpoints),并以@RefreshScope注解相依于已变更设定的Bean。
wqlqzqxt4#
我使用下面的代码从代码本身重新启动我的应用程序。使用单独的线程关闭上下文不会关闭JVM。