重載機制

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
    }
}

results matching ""

    No results matching ""