天天看點

Spring Boot ——IntelliJ Idea本地運作工程不斷重新開機

 (一)問題描述             Idea導入項目後,配置好profile(比如:local)後運作工程,在沒有出錯的情況下工程會正常啟動,出現下圖表示工程啟動成功:

Spring Boot ——IntelliJ Idea本地運作工程不斷重新開機

      正常情況下:工程會一直停在該處,表示工程運作中;       而我出現的問題是工程又重新啟動,重複之前的啟動、讀取資料庫,不斷重新開機。這樣導緻的後果就是在浏覽器無法正常通路接口URL,比如如果背景不斷重新開機,你就無法登入系統。

(二)解決過程           開始的google限于控制台的info輸出,針對控制台顯示的錯誤資訊去google,一直未得到解決。           其次,從Gitlab上clone下來的項目,在别人的idea上運作沒有異常,而在自己的idea上不斷重新開機,可以猜想出,是自己的idea配置有問題,或者是本地配置有影響。是以,重裝了idea,換了idea的版本,甚至重裝了jdk,結果并沒有解決問題。其他解決途徑:删除本地C槽下的C:\Users\你的使用者名\.IntelliJIdea(idea版本号)檔案夾;删除項目下的.idea檔案夾;重新導入項目。等等,因為自己對出錯的原因不了解,是以一直處于盲目的搜尋之中。是以建議整理搜尋的關鍵詞,精準的搜尋詞對找到解決答案大有裨益。

(三)原因剖析            通過三種途徑接近了問題的原因所在:            1、精準的搜尋關鍵詞——spring boot 自動重新開機(或不斷重新開機);            2、通過關鍵詞連結到的部落格和技術網站;                         部落格位址: http://genericyzh.com/springboot/SpringBoot-restart-problem/                          github位址:  https://github.com/x113773/testall/issues/8            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是一件比較難受的事,但是如果通過自己解決,又是喜悅無比。

繼續閱讀