设为首页 收藏本站
查看: 934|回复: 0

[经验分享] 利用Redis构建自定义标签(1)

[复制链接]

尚未签到

发表于 2016-12-20 10:32:57 | 显示全部楼层 |阅读模式
(1)整体设计


DSC0000.png
 

 

 

(2)字典模块


DSC0001.png
 

 

(3)Redis模块


DSC0002.png


 

(4)加载总控线程

package com.crm.application.main;
import java.sql.Connection;
import java.sql.Statement;
import java.util.concurrent.CountDownLatch;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.crm.application.load.DictionaryLoadThread;
import com.crm.h2.H2Manager;
import com.crm.h2.load.H2LoadThread;
import com.crm.redis.load.RedisLoadThread;
public class MainThread extends Thread {
private static Log log = LogFactory.getLog(MainThread.class);
public static final CountDownLatch mainThreadStopLatch = new CountDownLatch(1);
@Override
public void run() {
log.info("-------------------------【总制线程】BEGIN-------------------------");
try {
log.info("---------------【CRM系统初始化】【01】【H2初始化】---------------");
Connection conn = H2Manager.getConnection();
Statement stmt = conn.createStatement();
stmt.executeUpdate(H2Manager.getCreateCrmTranslateKindSql());
stmt.executeUpdate(H2Manager.getCreateCrmTranslateMapSql());
conn.close();
new H2LoadThread().start();
log.info("---------------【CRM系统初始化】【02】【字典加载】---------------");
new DictionaryLoadThread().start();
mainThreadStopLatch.await();
} catch (Exception e) {
e.printStackTrace();
}
log.info("---------------【CRM系统初始化】【03】【Redis缓存加载】---------------");
// 必须等待上面的2个线程执行完成后,在执行Redis
new RedisLoadThread().start();
log.info("-------------------------【总制线程】END-------------------------");
}
}

 (5)字典加载线程


package com.crm.application.load;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.crm.application.CrmContext;
import com.crm.application.main.MainThread;
import com.crm.common.util.CrmConst;
import com.crm.model.common.BODwdCrmMemExtinfoDim;
import com.crm.model.dictionary.BOCrmDictionary;
import com.crm.service.base.BaseSVImpl;
import com.crm.service.dictionary.DictionarySVImpl;
import com.crm.service.dictionary.StaticDataSVImpl;
import com.crm.service.dictionary.load.implclass.interfaces.IDictionaryLoadSV;
public class DictionaryLoadThread extends Thread {
private static Log log = LogFactory.getLog(DictionaryLoadThread.class);
List<BODwdCrmMemExtinfoDim> list = null;
List<String> dimCodeList = null;
// 1.获取数据仓库的数据
BaseSVImpl BaseSVImpl = CrmContext.getBean("BaseSVImpl", BaseSVImpl.class);
DictionarySVImpl DictionarySVImpl = CrmContext.getBean("DictionarySVImpl", DictionarySVImpl.class);
StaticDataSVImpl StaticDataSVImpl = CrmContext.getBean("StaticDataSVImpl", StaticDataSVImpl.class);
@Override
public void run() {
try {
if (checkDataRepositoryNeedLoad()) {
doRun();
}
} catch (Exception e) {
log.error(e.getMessage());
} finally {
MainThread.mainThreadStopLatch.countDown();
}
}
private void doRun() {
// 1.清空静态数据
StringBuilder sql = new StringBuilder();
sql.append(" DELETE CRM_STATIC_DATA A  ");
sql.append(" WHERE EXISTS (SELECT 1 ");
sql.append(" FROM CRM_DICTIONARY B ");
sql.append(" WHERE A.DICTIONARY_ID = B.ID ");
sql.append(" AND B.INIT_SRC = :INIT_SRC ) ");
Map params = new HashMap();
params.put("INIT_SRC", CrmConst.CrmDictionaryInitSrc.DATA_REPOSITORY);
BaseSVImpl.executeNativeUpdate(sql.toString(), params);
// 2.清空静态数据
sql.delete(0, sql.length());
sql.append(" DELETE CRM_DICTIONARY A WHERE A.INIT_SRC = :INIT_SRC ");
BaseSVImpl.executeNativeUpdate(sql.toString(), params);
// 3.新增字典数据
List<BOCrmDictionary> BOCrmDictionarys = new ArrayList<BOCrmDictionary>();
for (String dimCode : dimCodeList) {
BODwdCrmMemExtinfoDim bo = getBODwdCrmMemExtinfoDim(dimCode, list);
BOCrmDictionary d = new BOCrmDictionary();
d.setCityControl(bo.getCityValidFlag().toString());
d.setCode(bo.getDimCode().toString());
d.setCreateDate(new Date());
d.setInitImpl("com.crm.service.dictionary.load.implclass.impl.DefaultDictionaryLoadSVImpl");
d.setInitSrc(CrmConst.CrmDictionaryInitSrc.DATA_REPOSITORY);
d.setInitType(CrmConst.CrmDictionaryInitType.IMPL_CLASS);
d.setLoadOnStartUp(CrmConst.commonYesOrNoString.YES);
d.setName(bo.getDimName());
d.setRemarks("");
d.setState(CrmConst.CommonState.VALIDATION);
d.setUpdateDate(new Date());
BOCrmDictionarys.add(d);
}
DictionarySVImpl.saveBatch(BOCrmDictionarys);
// 获取所有的字典
sql.delete(0, sql.length());
sql.append(" from BOCrmDictionary a where a.state = :state and a.loadOnStartUp = :loadOnStartUp");
params = new HashMap();
params.put("state", CrmConst.CommonState.VALIDATION);
params.put("loadOnStartUp", CrmConst.commonYesOrNoString.YES);
List<BOCrmDictionary> existDRList = DictionarySVImpl.getEntitys(sql.toString(), params);
for (BOCrmDictionary b : existDRList) {
try {
if (b.getInitType().equals(CrmConst.CrmDictionaryInitType.STATIC_DATA)) {
} else if (b.getInitType().equals(CrmConst.CrmDictionaryInitType.IMPL_CLASS)) {
String className = b.getInitImpl();
IDictionaryLoadSV sv = (IDictionaryLoadSV) Class.forName(className).newInstance();
sv.execute(b, list);
} else if (b.getInitType().equals(CrmConst.CrmDictionaryInitType.SQL)) {
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private boolean checkDataRepositoryNeedLoad() {
boolean flag = true;
StringBuilder sql = new StringBuilder();
sql.append(" SELECT * FROM DWD_CRM_MEM_EXTINFO_DIM A ");
list = BaseSVImpl.executeNativeSelect(sql.toString(), new HashMap(), BODwdCrmMemExtinfoDim.class);
dimCodeList = new ArrayList<String>();
for (BODwdCrmMemExtinfoDim b : list) {
if (!dimCodeList.contains(b.getDimCode().toString())) {
dimCodeList.add(b.getDimCode().toString());
}
}
sql.delete(0, sql.length());
sql.append(" SELECT COUNT(1) TOTAL_COUNT ");
sql.append(" FROM CRM_STATIC_DATA A, CRM_DICTIONARY B ");
sql.append(" WHERE A.DICTIONARY_ID = B.ID ");
sql.append(" AND A.STATE = :STATE ");
sql.append(" AND B.STATE = :STATE ");
sql.append(" AND B.INIT_SRC = :INIT_SRC");
Map params = new HashMap();
params.put("STATE", CrmConst.CommonState.VALIDATION);
params.put("INIT_SRC", CrmConst.CrmDictionaryInitSrc.DATA_REPOSITORY);
List<Map> totalCountList = BaseSVImpl.executeNativeSelect(sql.toString(), params);
long dataRepositoryAmount = Long.parseLong(totalCountList.get(0).get("TOTAL_COUNT").toString());
if (list.size() == dataRepositoryAmount) {
flag = false;
}
return flag;
}
private BODwdCrmMemExtinfoDim getBODwdCrmMemExtinfoDim(String dimCode, List<BODwdCrmMemExtinfoDim> list) {
BODwdCrmMemExtinfoDim r = null;
for (BODwdCrmMemExtinfoDim b : list) {
if (dimCode.equals(b.getDimCode().toString())) {
r = b;
break;
}
}
return r;
}
}

 


 

 

 

 


 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-316874-1-1.html 上篇帖子: redis学习笔记-java操作String类型 下篇帖子: redis集合类型概述(2-1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表