原创 Docker 二:IDEA + Docker 插件創建鏡像並運行 spring boot 項目

IDEA 上提供了 Docker integration 插件,可以很方便的管理鏡像和容器,當然這些操作通過命令行也能完成,使用 IDEA 插件方式的另一個便利在於 IDEA 提供了 Docker 配套的 Configuration,

原创 MyBatis 緩存 - 上:一級緩存

在實際項目中,有些情況下相同的查詢語句可能被重複執行,MyBatis 提供了一級緩存來優化這種情況,相同的查詢 Sql 會命中一級緩存,直接返回,減少不必要的數據庫查詢提高性能。 實現原理 Mybatis 提供了 SqlSession

原创 Docker 一:入門

Docker 可以用來打包應用、依賴以及環境到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上。 docker 兩個關鍵的部分爲容器和鏡像,這兩者的關係可以理解爲 OOP 中類和對象的關係,容器作爲對象,鏡像作爲類。Doc

原创 單體應用和服務化應用的一些思考

單體應用 單體應用整個項目代碼都在同一個應用工程中,這種方式在早期可以有效提高開發效率,測試、部署和運維也比較方便。少量的開發人員就可以完成所有工作。然而隨着業務規模、數據量的不斷擴大,單體應用就會出現問題, 部署測試效率低下:每次

原创 Spring MVC 根據 controller 層方法入參和返回值動態生成日誌 - 上 :尋找擴展點並進行封裝

背景 需求是這樣的:對網關層指定接口(url)的調用情況做日誌記錄,日誌需要根據 controller 層方法的入參和返回值動態生成。 如果只是記錄 url 的調用情況可以直接使用 HandlerInterceptor 實現,但需求中

原创 解析配置文件自動裝配 DataSource + AbstractRoutingDataSource + AOP 實現動態數據源 下:配置動態數據源,AOP 進行使用

上篇文章中已經藉助 DynamicDataSourceBuilder 類從配置文件中解析得到了默認數據源和動態數據源,接下來需要配置動態數據源的“本體”,並藉助 AOP 動態的切換數據源。 配置動態數據源 AbstractRoutin

原创 解析配置文件自動裝配 DataSource + AbstractRoutingDataSource + AOP 實現動態數據源 上:原理解析,解析數據源

spring boot 自動裝配會通過 spring.datasource.*爲我們自動裝配數據源,所以想要動態的切換數據源,第一件事是配置數據源,其次是怎麼切換?最後何時切換? 原理解析(使用 AbstractRoutingData

原创 fastjson 始終將 null 對象以 "null " 的形式返回到前端引發的源碼解析 - 下:來到 fasjson 內部,消除疑惑

接上篇:fastjson 始終將 null 對象以 "null " 的形式返回到前端引發的源碼解析 - 上:從 DispatcherServlet 出發 終於來到了 fastjson 內部。 FastJsonHttpMessageCo

原创 fastjson 始終將 null 對象以 "null " 的形式返回到前端引發的源碼解析 - 上:從 DispatcherServlet 出發

背景 項目中使用 fastjson 將 spring MVC 返回結果輸出爲 json 格式數據,有個需求是 null 對象不輸出,即前端不會接收到 "obj": null 形式的 json 數據,然而在進行如下的配置後, null

原创 從 HTTPServletRequest 中根據 User-Agent 獲取訪問設備信息

背景:根據 HttpServletRequest獲取訪問設備信息。 Http 協議請求頭中的 User-Agent屬性會將客戶端設備的信息傳遞給服務器,這些信息包括客戶端操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽

原创 大型網站架構演化發展歷程 - 下

1-5見上一篇博文:大型網站架構演化發展歷程 - 上 6 使用 CDN 和反向代理加上網站響應 CDN 和反向代理的基本原理都是緩存,區別在於 CDN 不是在網絡提供商的機房,使用戶在請求網站服務時,可以從距離最近自己最近的網絡提供

原创 大型網站架構演化發展歷程 - 上

大型網站的技術挑戰主要來自於龐大的用戶,高併發的訪問和海量的數據。 1 初始階段的網站架構 大型網站都是從小網站發展而來,也是從小型網站架構逐步演化而來。 此時應用程序、數據庫、文件等所有資源都在一臺服務器上。 2 應用服務和數據服務

原创 bean 加載時的生命週期

bean 加載時的生命週期 0 類加載(靜態代碼塊) 1 對象初始化(構造代碼塊,構造器) 2 BeanNameAware#setBeanName 3 BeanFactoryAware#setBeanFactory 4 Applica

原创 idea + groovy + mybatis 自動生成 Dao、mappings 和 實體類

背景 在 windows 系統中,idea 在 C:\Users\用戶名\.IntelliJIdea2018.2\config\extensions\com.intellij.database\schema 目錄下默認存在如下 Gro

原创 Spring 實戰 五: 運行時注入

spring 提供了兩種在運行時求值的方式: 屬性佔位符(Property placeholder) spring 表達式語言(SpEL) 屬性佔位符 形式爲 “${…}” ,使用 @Value 註解,java 配置需要配置 P