簡體   English   中英

以編程方式重啟Spring Boot應用程序

[英]Programmatically restart Spring Boot application

我正在使用Spring Boot,我有一個用例,用戶可以上傳一個應該重啟應用程序的文件(因為在創建多個bean時會使用用戶的上傳)。 我知道我可以避免重啟應用程序,但此刻 - 這就是我想要的。

我在Spring-Cloud項目中找到了RestartEndpoint ,但似乎並沒有觸發ApplicationPreparedEvent 有沒有其他方法可以編程重啟Spring Boot應用程序?

通過調用Spring ApplicationContext上的refresh()方法來實現此目的的最簡單方法。 這將殺死並重新加載所有bean,因此您應該確定只有在應用程序安全的情況下才會發生這種情況。

我有一個特例,我的Spring Boot應用程序在LinuxLinux ,需要以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

在您的情況下,可以使用/ refresh端點(請參閱http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_endpoints )並注釋依賴於更改的bean使用@RefreshScope進行配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM