Spring Boot ——IntelliJ Idea本地運行工程不斷重啓

 (一)問題描述
            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、通過關鍵詞鏈接到的博客和技術網站;
                        博客地址:http://genericyzh.com/springboot/SpringBoot-restart-problem/
                         github地址: https://github.com/x113773/testall/issues/8
           3、SpringBoot的官方文檔
 
            不斷重啓的原因就是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是一件比較難受的事,但是如果通過自己解決,又是喜悅無比。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章