以编程方式重新启动Spring启动应用程序

以编程方式重新启动Spring启动应用程序,spring,spring-boot,Spring,Spring Boot,我使用的是SpringBoot,我有一个用例,用户可以上传一个文件,这将导致应用程序重新启动(因为用户的上传是在创建多个bean的过程中使用的)。我知道我可以避免重新启动应用程序,但目前-这正是我想要的 我在SpringCloud项目中发现了,但它似乎并没有启动ApplicationPreparedEvent。是否有其他方法可以通过编程方式重新启动Spring引导应用程序?在您的情况下,可以使用/refresh端点(请参阅)并使用@RefreshScope注释依赖于已更改配置的bean。最简单的

我使用的是SpringBoot,我有一个用例,用户可以上传一个文件,这将导致应用程序重新启动(因为用户的上传是在创建多个bean的过程中使用的)。我知道我可以避免重新启动应用程序,但目前-这正是我想要的


我在SpringCloud项目中发现了,但它似乎并没有启动
ApplicationPreparedEvent
。是否有其他方法可以通过编程方式重新启动Spring引导应用程序?

在您的情况下,可以使用/refresh端点(请参阅)并使用@RefreshScope注释依赖于已更改配置的bean。

最简单的方法是在Spring ApplicationContext上调用该方法。这将杀死并重新加载所有bean,因此您应该确保只有在应用程序安全的情况下才会发生这种情况

我有一个特例,在这个特例中,我的Spring Boot应用程序运行在
Linux
上,需要以
根用户身份运行

由于我以
systemd
服务的形式运行应用程序,因此可以按如下方式重新启动它:

Runtime.getRuntime().exec(new String[] { "/bin/systemctl", "restart", "foo" });
如果您的应用程序(希望)不需要以
root
身份运行,可以使用
setuid
包装脚本,或者更好地使用
sudo

检查此答案,了解如何执行此操作:


好吧,我没有使用Spring Cloud.:)我已经尝试过了,但它似乎不起作用,我得到了java.lang.IllegalStateException:GenericApplicationContext不支持多次刷新尝试:只需调用“刷新”一次。另见这个问题: