1. 程式人生 > >XStream實現緩存

XStream實現緩存

post mic put 數據字典 memcach 保存 util script clas

************************************************************************************

系統實現緩存有多種方式,如redis,ehcache,Memcached,在項目開發中,使用另外一種實現方式使用xml配置文件和XStream方式實現緩存,原理是數據放在內存中。思路是:定義一個全局靜態變量Map,將數據保存在map中即可。

************************************************************************************

步驟一:配置xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<webcache>
    <cache>
        <name>CACHE_DICT</name>
        <descript>數據字典</descript>
        <datasource></datasource>
        <sql><![CDATA[]]></sql>
        <mapperid>vc.cache.mapper.CACHE_DICT</mapperid>
        <type>DICT</type>
    </cache>
</webcache>

步驟二:建對應的實體類

@XStreamAlias("webcache") // XStream的別名註解,在xml文件對應標簽名
public class WebCacheXmlBean {

    @XStreamImplicit // 集合註解,只能用在集合屬性上
    List<CacheXmlBean> cacheList;

    public List<CacheXmlBean> getCacheList() {
        return cacheList;
    }

    public void setCacheList(List<CacheXmlBean> cacheList) {
        this.cacheList = cacheList;
    }
}
@XStreamAlias("cache")
public class CacheXmlBean {

    public static final String CACHE_TYPE_DICT = "DICT";
    public static final String CACHE_TYPE_DATA = "DATA";

    private String name;
    private String descript;
    private String datasource;
    private String sql;
    private String mapperid;
    private String type;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescript() {
        return descript;
    }

    public void setDescript(String descript) {
        this.descript = descript;
    }

    public String getDatasource() {
        return datasource;
    }

    public void setDatasource(String datasource) {
        this.datasource = datasource;
    }

    public String getSql() {
        return sql;
    }

    public void setSql(String sql) {
        this.sql = sql;
    }

    public String getMapperid() {
        return mapperid;
    }

    public void setMapperid(String mapperid) {
        this.mapperid = mapperid;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

步驟三:將xml配置信息轉化為bean

public static Map<String, List> DATA_CACHES = new HashMap<>();

public void dictCache(){
    XStream xStream = new XStream();
    xStream.autodetectAnnotations(true); //自動掃描註解
   xStream.processAnnotations(new Class[]{WebCacheXmlBean.class, CacheXmlBean.class}); // 掃描實體類
    File file = new File("f:/ETOM/pmms/pmms/src/test/resources/dict.xml");
    WebCacheXmlBean webCacheXmlBean = (WebCacheXmlBean) xStream.fromXML(file);
    List<CacheXmlBean> cacheXmlList = webCacheXmlBean.getCacheList();
    for (CacheXmlBean cacheXmlBean : cacheXmlList) {
        String cacheName = cacheXmlBean.getName();
        String mapperid = cacheXmlBean.getMapperid();
        String sql = cacheXmlBean.getSql();
        List cacheList = null;
        if(StringUtil.isNotEmpty(mapperid)){
            cacheList = dao.find(mapperid);
        }else if(StringUtil.isNotEmpty(sql)){
            cacheList = dao.findBySQL(sql);
        }
        logger.info("load cache 【"+cacheName+"】");
        if(cacheList != null){
            DATA_CACHES.put(cacheName, cacheList);
        }
    }
}

XStream實現緩存