重載機制
Posted by Bruce Tsai
狀況:清除設定檔 cache,實際設定值卻未隨之變更
- 系統對 properties 設定提供 cache 機制,並提供清除 cache 的方式
- 元件或服務在存取設定時,僅在初始化時讀取設定值
@Service
public class PortTypeService implements IPortTypeService {
String channelId;
String password;
...
public PortTypeService() {
// 初始化設定
channelId =
PropertiesUtil.getString("esp.mware.port.channel");
password =
PropertiesUtil.getString("esp.mware.port.password");
}
@Override
public boolean containsType(String[] types) {
if(types == null) throw new IllegalArgumentException();
// 由 service 本身記錄的設定取值
AuthInfo info = new AuthInfo(channelId, password);
OfferTypeVo offerTypes = port.lookupType(info, types);
// more code here
}
}
正確做法:直接取值
- 在有 cache 機制的情況下,程式本身不應暫存設定值或資料在記憶體中,避免 singleton 的服務永久保存設定值造成 cache 失效
@Service
public class PortTypeService implements IPortTypeService {
...
@Override
public boolean containsType(String[] types) {
if(types == null) throw new IllegalArgumentException();
// 直接取得設定值,不做任何暫存
AuthInfo info = new AuthInfo(
PropertiesUtil.getString("esp.mware.port.channel"),
PropertiesUtil.getString("esp.mware.port.password")
);
OfferTypeVo offerTypes = port.lookupType(info, types);
// more code here
}
}