原创 Java System#exit 無法退出程序的問題探索

背景 有朋友碰到了一個情況:java.lang.System#exit無法退出應用程序。我聽到這種情況的時候是感覺很驚奇的,這函數還能不起作用?這就好奇不已了呀 接着,朋友繼續給出了他的場景描述:在Dubbo應用連接註冊中心的時候

原创 Spring Boot + Apollo 動態修改日誌級別

起因 你是否碰到過如下場景: 在測試環境未發現的BUG,上了生產環境之後偶現,但同樣由於缺少調試信息,無法定位問題 調用內部服務、第三方服務,在某些case下系統未按預期運行,排查代碼後懷疑是被依賴方返回了錯誤的數據導致,但苦於

原创 Spring構造器注入循環依賴的解決方案及原理探索

前言 我們都知道Spring解決了Setter注入或者Field注入的循環依賴問題,依靠的是三個Map(earlySingletonObjects、singletonFactories、singletonObjects),網上有許

原创 Mybatis優雅存取json字段的解決方案 - TypeHandler (一)

起因 在業務開發過程中,會經常碰到一些不需要檢索,僅僅只是查詢後使用的字段,例如配置信息,管理後臺操作日誌明細等,我們會將這些信息以json的方式存儲在RDBMS表裏 假設某表foo的結構如下,字段bar就是以json的方式進行存

原创 AutowireCapableBeanFactory探密(2)——傳統裝配模式與現代註解驅動注入方式

回顧 上篇,介紹了AutowireCapableBeanFactory的作用:讓Spring管理的Bean去裝配和填充那些不被Spring託管的Bean,爲第三方框架賦能。其中,介紹AutowireCapableBeanFacto

原创 JDK1.8 Supplier實踐及總結

起因 羣裏黑神拋出了一個問題,意圖引起大家的思考 黑神簡單解釋之後,羣裏仍有同學不太理解 正好之前筆者在Supplier上有一些實踐,因此打算跟大家分享一下使用經驗 基礎知識 JDK1.8爲我們提供了一個函數接口Supplier

原创 Java如何讓線程池滿後再放隊列

背景 最近收到一道面試題:我們知道JDK的線程池在線程數達到corePoolSize之後,先判斷隊列,再判斷maximumPoolSize。如果想反過來,即先判斷maximumPoolSize再判斷隊列,怎麼辦? 建議往下瀏覽之前

原创 JDK Proxy與UndeclaredThrowableException不可不說的關係

背景 最近瀏覽Sentinel的wiki,其中有一段描述: 特別地,若 blockHandler 和 fallback 都進行了配置,則被限流降級而拋出 BlockException 時只會進入 blockHandler 處理邏

原创 PreparedStatement重新認知(1)——它真的預編譯嗎

起因 最近在閱讀數據庫連接池相關的書籍,書中有一小節提到了Statement與PreparedStatement的區別,並指出使用PreparedStatement會對SQL進行預編譯,並將預編譯的SQL存儲下來,下次直接使用,提

原创 Mybatis優雅存取json字段的解決方案 - TypeHandler (二)

回顧 上篇,我們分析了TypeHandler的註冊過程,分析了12個register方法之間盤根錯節的關係,最終得出註冊過程就是構建三個Map的過程。在這個過程中,爲使文章脈絡清晰,跳過了@MappedTypes、@MappedJ

原创 AutowireCapableBeanFactory探密(3)——依賴解析

前情回顧 在前兩篇文章中,多次提及AutowireCapableBeanFactory#resolveDependency方法,原因是該方法很重要,在Spring很多場合都涉及該方法的調用,包括但不限於以下場景: 解析@Reso

原创 AutowireCapableBeanFactory探密(1)——爲第三方框架賦能

起因 羣裏有朋友拋出了個問題,問爲什麼Spring Cache註解未生效,示例代碼如下: @RunWith(SpringRunner.class) @SpringBootTest @Slf4j public class DemoA

原创 PreparedStatement重新認知(2)——防止SQL注入

回顧 上篇,我們對PreparedStatement在MySQL下的工作機制進行了探究,瞭解到它在一般情況下並不比Statement更快(具體分析可參看: PreparedStatement重新認知(1)——它真的預編譯嗎),但我

原创 Spring Boot加載application.properties探究

背景 基於Spring Boot的多Module項目中,有許多公共的配置項,爲避免在每個接入層都配置一遍,一個設想是在公共依賴的Module的application.properties(application.yml)中進行配置

原创 Spring MVC統一異常處理及原理分析(二)

前言 上篇,我們已經闡述在Spring MVC中如何優雅地處理異常,並通過源碼分析了其原理及工作過程。 但是一定會有同學產生疑問:原來的異常處理方式,可以直接在catch塊中打印請求入參,當異常發生時,能夠清晰知道是什麼入參導致的