原创 BeanFactoryAware在InitializingBean之後執行,奇怪的Spring初始化順序?

網上已經有大把文章介紹bean的生命週期和執行順序,但是都是針對單個bean的。 今天在項目遇到一個問題:A類實現了BeanFactoryAware接口,將BeanBeanFactory對象保存在自己的static變量中。 public

原创 Guava Cache 緩存數據被移除後的監聽器RemovalListener

之前文章已經介紹了guava的容量管理,有4種方式可以將數據從緩存中移除。有的時候,我們需要在緩存被移除的時候,得到這個通知,並做一些額外處理工作。這個時候RemovalListener就派上用場了。 public class Main

原创 maven項目常用技巧: profile與資源過濾

一般的項目都會運行在不同的環境上,比如我們有本地環境、開發環境、測試環境、生產環境等等。這些不同的環境,必然有不同的配置。比如日誌級別,開發環境我們一般設置成debug,而生產環境一般設置成warn。我們肯定不希望:手動修改項目配置文件,

原创 spring容器初始化時候遇到的死鎖問題

最近啓動spring項目的時候遇到一個死鎖問題,使用jstack獲取線程堆棧的時候,可以看到2個線程出現了死鎖: DefaultSingletonBeanRegistry.getSingleton()源碼如下,可以看到這個方法需要對s

原创 Guava Cache之Cache接口

1、通過put或putAll手動向Cache中添加數據,guava不緩存value是null的key。我們可以在系統啓動的時候,就將某些數據手動放入緩存中,這樣就可以避免系統啓動後,第一個用戶訪問緩存不能命中的情況。 public sta

原创 Guava Cache特性:對於同一個key,只讓一個請求回源load數據,其他線程阻塞等待結果

設想高併發下的一種場景:假設我們將name=aty存放到緩存中,並設置的有過期時間。當緩存過期後,恰好有10個客戶端發起請求,需要讀取name的值。使用Guava Cache可以保證只讓一個線程去加載數據(比如從數據庫中),而其他線程則等

原创 消息摘要及其算法掃盲貼

消息摘要算法的主要特點有: 1、無論輸入的消息有多長,計算出來的消息摘要的長度總是固定的。例如應用MD5算法摘要的消息有128個比特位,用SHA-1算法摘要的消息最終有160比特位的輸出,SHA-1的變體可以產生192比特位和256比特位

原创 Guava Cache特性:refreshAfterWrite只阻塞回源線程,其他線程返回舊值

上一篇文章"Guava Cache特性:對於同一個key,只讓一個請求回源load數據,其他線程阻塞等待結果"提到:如果緩存過期,恰好有多個線程讀取同一個key的值,那麼guava只允許一個線程去加載數據,其餘線程阻塞。這雖然可以防止大量

原创 Guava Cache緩存容量管理

內存空間是有限的,一些不用的緩存數據需要及時清除,否則容器導致內存溢出。guava最簡單一種管理方式是:基於緩存數據個數,讓緩存條目始終不能超過一個上限。 // 創建1個cache,最多能存放5個緩存條目 Cache cache = Ca

原创 Guava Cache的Ticker

緩存一般設置的都有過期時間,如果我們寫單元測試代碼需要驗證這個功能(緩存過期,自動刪除)。假如設置的過期時間是1個小時,我們來驗證1h後緩存是否被刪除,那我們總不能讓單元測試代碼運行1個小時吧。 public class Demo{

原创 windows下開啓mySQL5.7的binlog

我使用的是windows7操作系統,安裝的mysql版本是5.7,使用的客戶端工具是mysql安裝後自帶的workbench。mysql的binlog功能,默認是關閉的。 開啓方法很簡單:修改my.ini配置文件即可 之後重啓my

原创 Guava Cache的緩存統計

guava cache很適合做進程內的緩存,本文先學習下它的緩存統計功能,需要使用recordStats()打開緩存統計功能。 // 創建1塊緩存,key和value都是integer類型,最大緩存個數是5,開啓緩存統計功能

原创 guava-retrying重試工具庫: 隔多長時間重試

guava-retrying提供了WaitStrategy接口,用來控制2次重試的時間間隔,這個接口與StopStrategy有的類似。內置的等待策略在WaitStrategies中定義。 import java.io.IOExcept

原创 java重試工具庫: 實現業務邏輯與重試邏輯的解耦

對於開發過網絡應用程序的程序員來說,重試並不陌生,由於網絡的擁堵和波動,此刻不能訪問服務的請求,也許過一小段時間就可以正常訪問了。比如下面這段給某個手機號發SMS的僞代碼: // 發送SMS public boolean sendSMS(

原创 pom配置之:snapshot快照庫和release發佈庫

本文轉載自:  鐵木箱子的mzone的博客: http://www.mzone.cc/article/277.html http://www.mzone.cc/article/279.html         在使用maven過程中,我