前言:誰沒被Nginx代理的404坑過? 前幾天幫業務排查問題,差點沒被一個Nginx代理的404搞破防。 場景很簡單:前端用Nginx代理到Tomcat,訪問nginx_url/web/user/hi直接404;但跳過Nginx,直接訪問tomcat_url/user/hi,接口穩穩返回"hello hi"。更詭異的是,把代理地址換成Spring Cloud Gateway,同樣的路徑nginx
在業務系統遷移改造中,你是否也遇到過這樣的場景:項目裏充斥着Properties.load()的硬編碼,配置文件的key和對象屬性靠手動getProperty逐個綁定,一旦配置項增多,不僅寫起來繁瑣,改起來更是心驚膽戰——生怕漏填一個屬性,或者拼錯一個key。 最近我在將一個遺留項目改造為Spring Boot項目時,就狠狠踩了這個坑。今天就用實戰案例告訴你:從"刀耕火種"的手動綁定,到Sprin
前言 如果有使用過spring aop功能的小夥伴,應該都會知道spring aop主要是通過動態代理在運行時,對業務進行切面攔截操作。今天我們就來實現一下如何通過APT+AST在編譯期時實現AOP功能。不過在此之前先科普一下APT和AST相關內容 APT(註解處理器) apt可以查看我之前寫過的文章聊聊如何運用JAVA註解處理器(APT) AST(抽象語法樹) 什麼是AST 抽象語法樹(Abst
背景:當Kafka遇上多租户場景 最近公司業務線面臨一個棘手問題:核心消息隊列Kafka需要支持多租户數據隔離,但Kafka原生並未提供開箱即用的租户機制。想象一下:多個業務線數據混雜在同一個集羣中,既可能導致資源搶佔,又存在數據泄露風險。如何在不重構架構的前提下實現高效隔離?本文將從實戰出發,拆解五種主流方案的技術細節與落地權衡。 五種租户隔離方案深度解析 方案一:物理集羣隔離——最徹底的"物理
前言 在我們擴展scg時,獲取requestbody也是一個挺常見的需求了,比如記錄日誌,我們要獲取請求體裏面的內容。在HTTP協議中,服務器接收到客户端的請求時,請求體(RequestBody)通常是以流的形式傳輸的。這個流在設計上是隻讀且不可重複讀取的。即request body只能讀取一次,但我們很多時候是更希望這個requestbody可以被多次讀取,那我們今天就來聊下這個話題 實現思路
前言 最近團隊的網關日誌發現有不少響應結果記錄,出現形如下的亂碼 �V*.I,IU�JK�)N�Q�M-.NL�^�m�?��(�釷/�,}�����]O7L|���ŲƧ�MϦnP�Q*K�)*�+���QJ-*�/r�O���{�@8� �� 一開始感覺是不是中文亂碼,但是後面發現有些日誌不是中文,也是亂碼,而有些記錄的日誌又能正常顯示。於是搜索了一圈,在https://b
在微服務體系裏,SpringCloud Gateway 作為流量調度的核心組件,其路由配置的穩定性,直接關係到整個系統能否正常運轉。之前,我們團隊負責的項目藉助 Apollo 配置中心,構建起一套動態路由機制。代碼源自官方範例(apollo-use-cases),長期穩定運行,為業務發展築牢了技術根基。 然而,平靜的工作節奏被一次突發狀況打破。新配置到 Apollo 的路由,彷彿被施了魔法,
在當今的軟件開發中,一個項目往往需要在不同的環境中運行,如開發、測試和生產環境。每個環境都有其獨特的配置需求,如何高效地管理這些配置,讓項目在不同環境中順利運行,成為了開發者們必須面對的問題。Spring Boot 和 Maven 作為 Java 開發中非常流行的框架和構建工具,為我們提供了強大的解決方案,那就是 Spring Boot Profile 和 Maven Profile。本文將深入探
Spring Boot Map依賴注入血坑實錄:為什麼我的Map總是少了一半數據? 凌晨三點改BUG:一個Map引發的「玄學」問題 團隊在擴展Spring Kafka租户功能時,遇到了一個詭異的現象: 注入的MapString, KafkaTemplate始終無法獲取完整的實例,明明配置了多個模板,打印出來卻只有默認的一個! 當時以為是Bean加載順序問題,折騰了兩天debug,甚至被
在接口平台的功能優化之路上,我們一直致力於探索如何讓接口提供方能夠更便捷地將接口信息發佈到平台。經過一番深入調研,我們驚喜地發現,公司絕大多數項目都引入了 Swagger,這一發現為我們開啓了新的優化思路 —— 通過解析 Swagger 來實現接口信息的高效收集與發佈。起初,我們以為解析工作不過是小菜一碟,上手後才發現,雖然解析本身並不複雜,但對象的組裝過程卻相當繁瑣。不過,幸運的是,我們找到了一
前言 在某次聚餐中,朋友聊起他接了一個私單,他不想把他的核心代碼開放出去,但又想項目能正常運行。翻譯成技術術語就是他想對源碼進行混淆或者加密。之前我寫過一篇文章聊聊如何進行代碼混淆。今天我們來聊另一個的話題,聊聊如何利用ClassFinal對代碼進行加密。 ClassFinal ClassFinal簡介 ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包
前言 之前偶然看到一篇文章利用aop實現熱拔插(類似於插件),裏面的實現挺好玩。今天我們也來玩一把 前置知識 Advice: org.aopalliance.aop.Advice “通知”,表示 Aspect 在特定的 Join point 採取的操作。包括 “around”, “before” and “after 等 Advice,大體上分為了三類:BeforeAdvice、Method
前言 有一定開發經驗的同學對AOP應該很瞭解吧,如果不瞭解,可以先查看如下文章進行科普一下https://baike.baidu.com/item/AOP/1332219?fr=aladdin,再來閲讀本文。 示例前置準備 注: 本示例基於springboot進行演示 1、在項目pom引入aop的GAV dependency groupIdorg.springfram
前言 在我們開發過程中,會經常碰到這麼一些需求,比如在在主流程執行前,要做一些前置事件,在主流程執行之後,做一些收尾工作。對一些新手程序員,他可能會直接寫類似如下的代碼 public void execute(){ doBefore(); doBiz(); doAfter(); } 對有一定工作經驗的程序員,他可能會用AOP或者用一些設
前言 本文案例來自業務部門的一個業務場景。他們的業務場景是他們部門研發了一個微服務上下文透傳組件,其透傳原理也挺簡單的,就是通過springboot攔截器把請求參數塞進threadlocal,然後下游通過threadlocal取到值,服務之間進行feign調用時,再把threadlocal的參數塞到header頭裏面。這個組件一直用得好好的,突然有一天因為傳的參數值是中文,導致亂碼。他們通過嘗試下