XStream实现缓存

Posted antlord

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XStream实现缓存相关的知识,希望对你有一定的参考价值。

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

系统实现缓存有多种方式,如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实现缓存的主要内容,如果未能解决你的问题,请参考以下文章

使用XStream是实现XML与Java对象的转换--注解

使用XStream是实现XML与Java对象的转换--Object Stream

如何缓存片段视图

转移依赖失败,被缓存在本地仓库中

XStream解析xml代码

xstream 实现simplebean2xml ,xml2simplebean