(一)問題描述
Idea導入項目後,配置好profile(比如:local)後運行工程,在沒有出錯的情況下工程會正常啓動,出現下圖表示工程啓動成功: 正常情況下:工程會一直停在該處,表示工程運行中;
而我出現的問題是工程又重新啓動,重複之前的啓動、讀取數據庫,不斷重啓。這樣導致的後果就是在瀏覽器無法正常訪問接口URL,比如如果後臺不斷重啓,你就無法登錄系統。
(二)解決過程
開始的google限於控制檯的info輸出,針對控制檯顯示的錯誤信息去google,一直未得到解決。
其次,從Gitlab上clone下來的項目,在別人的idea上運行沒有異常,而在自己的idea上不斷重啓,可以猜想出,是自己的idea配置有問題,或者是本地配置有影響。因此,重裝了idea,換了idea的版本,甚至重裝了jdk,結果並沒有解決問題。其他解決途徑:刪除本地C盤下的C:\Users\你的用戶名\.IntelliJIdea(idea版本號)文件夾;刪除項目下的.idea文件夾;重新導入項目。等等,因爲自己對出錯的原因不瞭解,所以一直處於盲目的搜索之中。因此建議整理搜索的關鍵詞,精準的搜索詞對找到解決答案大有裨益。
(三)原因剖析
通過三種途徑接近了問題的原因所在:
1、精準的搜索關鍵詞——spring boot 自動重啓(或不斷重啓);
2、通過關鍵詞鏈接到的博客和技術網站;
3、SpringBoot的官方文檔
官方文檔地址: https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/pdf/spring-boot-reference.pdf
不斷重啓的原因就是springboot的自動重啓功能,或稱之爲熱部署。
起這個功能就是開發者工具——spring-boot-devtools模塊。可以直接在maven依賴中部署它。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
如果應用使用spring-boot-devtools,則只要classpath下的文件有變動,它就會自動重啓。這在使用IDE時非常有用,因爲可以很快得到代碼改變的反饋。默認情況下,classpath下任何指向文件夾的實體都會被監控,注意一些資源的修改比如靜態assets,視圖模板不需要重啓應用。在項目工程中,如果你的日誌是輸出在classpath下,而且是RollingFile,那麼你的idea肯定會不斷重啓,我的就是這種情況。
(四)解決方法
1、在上面的博客裏,給出的解決方法是日誌不要輸出到classpath下,親測不好使;
2、正確的方法:把這個熱部署的功能給禁用了就行了。(如果你的idea默認是開啓的話)
禁用辦法(1):
在application.properties文件中設置: spring.devtools.restart.enabled=false
禁用辦法(2):
在調用SpringApplication.run(…)之前設置一個系統屬性,如下:
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApp.class, args);
}
親測2種方法都可行。
更爲詳細的原理見官方文檔即可。
(五) 總結心得
a)官網和官方文檔應該被閱讀;
b)google搜索詞精準概括問題;
c)csdn,github,stackoverflow網站;
調bug是一件比較難受的事,但是如果通過自己解決,又是喜悅無比。