XStream實現緩存
阿新 • • 發佈:2018-02-02
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實現緩存