最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot解決循環(huán)調用問題

 更新時間:2024年10月29日 11:26:38   作者:Long-龍哥  
作者在將SpringBoot從1.5版本升級至2.6版本,并遷移至阿里云上運行后,遇到了循環(huán)調用問題,在Jetty容器中運行沒問題,但在Tomcat容器中就出現(xiàn)了循環(huán)引用問題,原因是SpringBoot 2.6不鼓勵循環(huán)引用,暴露出該問題,作者提供了兩種解決思路

SpringBoot解決循環(huán)調用

此文僅記錄自身遇到的問題進行解決處理思路。

背景

項目為springboot-1.5的版本,遷移上阿里云,提升springboot版本為2.6.當初最開始的時候用的是jetty容器在本地進行啟動,但是最后需要將工程遷移到ali cloud,并且運用K8S作為容器,所以最后將項目打包方式改為jar包。

Jetty 運行的時候是沒有絲毫的問題,但是用自帶的tomcat 的時候問題就暴漏出來了。

原因應該是循環(huán)引用對于springboot2.6來說是不被鼓勵的,所以會直接暴漏出來,最直接簡單粗暴的方法:

第一種解決思路

下面為允許循環(huán)調用的配置操作:

spring.main.allow-circular-references=true

第二種解決思路

因為用最簡單的方式進行循環(huán)調用,表象一是自己故意做出來的,表象2為當時遇到的。故將兩種表象都進行記錄,

所謂循環(huán)調用無非就是A調用B,B調用A,導致的springboot 在進行對象加載的時候的一種沖突。下面具體介紹解決思路。

表象1:

此為最簡單,也是最容易發(fā)現(xiàn)的一種循環(huán)調用表現(xiàn):

2022-10-02 08:44:55.456  WARN 17112 --- [           main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'a': Unsatisfied dependency expressed through field 'b'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'b': Unsatisfied dependency expressed through field 'a'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'a': Requested bean is currently in creation: Is there an unresolvable circular reference?
2022-10-02 08:44:55.456  INFO 17112 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-10-02 08:44:55.472 ERROR 17112 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

┌─────┐
|  a (field private com.example.service.B com.example.service.A.b)
↑     ↓
|  b (field private com.example.service.A com.example.service.B.a)
└─────┘

表象2:

此種直接導致tomcat啟動失敗,并且在關閉tomcat的時候直接失敗,且出現(xiàn)了內存泄漏的問題,錯誤是一樣的,順手從網上粘貼了一個

 07-Sep-2020 19:09:11.196 WARNING [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [system] appears to have started a thread named [pool-1-thread-4] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
 java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
 java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
 java.lang.Thread.run(Thread.java:748)

  • 表象一直接是在控制臺看到的,沒啥好說的
  • 表象二這種應用啟動的時候直接就提示會造成內存泄漏,但是具體的錯誤信息是沒有的。

當時解決的時候是分為了一下幾步:

1.main方法進行debug模式。調節(jié)logbcak日志級別為debug,但是效果不是很明顯。依然看不到具體的錯誤信息。

2.然后自己就只能盲猜了,直接上斷點給各種config注解,datasource,很幸運,當加載datasource 的時候報錯了。

  • 然后放開斷點,沒問題出現(xiàn)了表象2的問題,原因是我們使用的druid連接池里面的filter配置,最后注釋掉,加載成功了,但是問題依然存在。
  • 那就干脆直接從斷點出入手,一路加載debug下去,最后發(fā)現(xiàn)了create bean 的時候出現(xiàn)了問題,此時便發(fā)現(xiàn)了循環(huán)調用的問題。
  • OK,處理掉之后,本地已經可以正常run 起來了。然而,在上到服務器的時候依舊報表象2的錯誤。

3. 既然已經知道是循環(huán)調用的問題,那么網上搜個logback的配置吧。讓它直接打印各個對象的加載和調用log吧

配它!!

<logger name="org.springframework.boot">
	<level value="trace"/>
	<appender-ref ref="stdout"/>
</logger>

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 解決idea2020.1找不到程序包和符號的問題

    解決idea2020.1找不到程序包和符號的問題

    這篇文章主要介紹了解決idea2020.1找不到程序包和符號的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 在Java中讀取CSV文件的方式

    在Java中讀取CSV文件的方式

    在項目開發(fā)中我們經常需要讀取csv的內容的操作,讀取的邏輯并不復雜,下面這篇文章主要給大家介紹了關于在Java中讀取CSV文件的方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • 一問詳解SpringBoot配置文件優(yōu)先級

    一問詳解SpringBoot配置文件優(yōu)先級

    在SpringBoot項目當中,我們要想配置一個屬性,可以通過這三種方式當中的任意一種來配置都可以,那么優(yōu)先級怎么算,本文主要介紹了一問詳解SpringBoot配置文件優(yōu)先級,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Java中String類的一些常見方法總結

    Java中String類的一些常見方法總結

    這篇文章主要給大家介紹了關于Java中String類的一些常見方法,文中包括了Java中String類的基本概念、構造方式、常用方法以及StringBuilder和StringBuffer的使用,涵蓋了字符串操作的各個方面,包括查找、轉換、比較、替換、拆分、截取等,需要的朋友可以參考下
    2024-11-11
  • Java獲取電腦真實IP地址的示例代碼

    Java獲取電腦真實IP地址的示例代碼

    這篇文章主要介紹了Java如何獲取電腦真實IP地址,忽略虛擬機等IP地址的干擾,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09
  • Spring Data Jpa+SpringMVC+Jquery.pagination.js實現(xiàn)分頁示例

    Spring Data Jpa+SpringMVC+Jquery.pagination.js實現(xiàn)分頁示例

    本文介紹了Spring Data Jpa+SpringMVC+Jquery.pagination.js實現(xiàn)分頁示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • String中intern方法的使用場景詳解

    String中intern方法的使用場景詳解

    這篇文章主要給大家介紹了關于String中intern方法的使用場景,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • java獲取系統(tǒng)路徑字體、得到某個目錄下的所有文件名、獲取當前路徑

    java獲取系統(tǒng)路徑字體、得到某個目錄下的所有文件名、獲取當前路徑

    這篇文章主要介紹了java獲取系統(tǒng)路徑字體、得到某個目錄下的所有文件名、獲取當前路徑,需要的朋友可以參考下
    2014-04-04
  • 解決IDEA中Maven項目中JSTL標簽無效問題

    解決IDEA中Maven項目中JSTL標簽無效問題

    這篇文章主要介紹了關于IDEA中Maven項目中JSTL標簽無效問題的解決方法,需要的朋友可以參考下
    2018-09-09
  • 詳解Java Selenium中的鍵盤控制操作

    詳解Java Selenium中的鍵盤控制操作

    這篇文章主要為大家介紹了如何使用java代碼利用Selenium 控制瀏覽器中需要用到的鍵盤操作。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-01-01

最新評論

万州区| 龙胜| 乳山市| 洛隆县| 宽甸| 镇赉县| 乐安县| 贡觉县| 沭阳县| 犍为县| 昌宁县| 临猗县| 明星| 东山县| 林芝县| 通河县| 黄山市| 耒阳市| 株洲县| 崇信县| 东山县| 开化县| 天等县| 克东县| 肥东县| 启东市| 洪泽县| 沙洋县| 和龙市| 南康市| 太湖县| 五莲县| 阜康市| 和顺县| 佛坪县| 尉犁县| 稷山县| 佛山市| 台南市| 民乐县| 福贡县|