From 50add8ec34be007c755bc9adad23d7fdbd2dd4e6 Mon Sep 17 00:00:00 2001 From: yawu_bear Date: Fri, 10 Aug 2018 16:52:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/utils/CacheUtils.java | 112 ++++++++++++++++++ .../com/ruoyi/common/utils/DictUtils.java | 58 +++++++++ .../com/ruoyi/common/utils/SpringUtil.java | 77 ++++++++++++ .../dict/service/DictDataServiceImpl.java | 47 ++++++-- src/main/resources/ehcache/ehcache-shiro.xml | 10 ++ 5 files changed, 291 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/ruoyi/common/utils/CacheUtils.java create mode 100644 src/main/java/com/ruoyi/common/utils/DictUtils.java create mode 100644 src/main/java/com/ruoyi/common/utils/SpringUtil.java diff --git a/src/main/java/com/ruoyi/common/utils/CacheUtils.java b/src/main/java/com/ruoyi/common/utils/CacheUtils.java new file mode 100644 index 000000000..42c8eeccc --- /dev/null +++ b/src/main/java/com/ruoyi/common/utils/CacheUtils.java @@ -0,0 +1,112 @@ +/** + * Copyright © 2018 All rights reserved. + */ +package com.ruoyi.common.utils; + +import org.apache.shiro.cache.Cache; +import org.apache.shiro.cache.CacheManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Iterator; +import java.util.Set; + +/** + * Cache工具类 + * + * @author yawu_bear + * @date 2018-08-10 + */ +public class CacheUtils { + + private static Logger logger = LoggerFactory.getLogger(CacheUtils.class); + private static CacheManager cacheManager = SpringUtil.getBean(CacheManager.class); + + /** + * 获取缓存 + * + * @param cacheName + * @param key + * @return + */ + public static Object get(String cacheName, String key) { + return getCache(cacheName).get(getKey(key)); + } + + /** + * 获取缓存 + * + * @param cacheName + * @param key + * @param defaultValue + * @return + */ + public static Object get(String cacheName, String key, Object defaultValue) { + Object value = get(cacheName, getKey(key)); + return value != null ? value : defaultValue; + } + + /** + * 写入缓存 + * + * @param cacheName + * @param key + * @param value + */ + public static void put(String cacheName, String key, Object value) { + getCache(cacheName).put(getKey(key), value); + } + + /** + * 从缓存中移除 + * + * @param cacheName + * @param key + */ + public static void remove(String cacheName, String key) { + getCache(cacheName).remove(getKey(key)); + } + + /** + * 从缓存中移除所有 + * + * @param cacheName + */ + public static void removeAll(String cacheName) { + Cache cache = getCache(cacheName); + Set keys = cache.keys(); + for (Iterator it = keys.iterator(); it.hasNext(); ) { + cache.remove(it.next()); + } + logger.info("清理缓存: {} => {}", cacheName, keys); + } + + /** + * 获取缓存键名,多数据源下增加数据源名称前缀 + * + * @param key + * @return + */ + private static String getKey(String key) { + /*String dsName = DataSourceHolder.getDataSourceName(); + if (StringUtils.isNotBlank(dsName)) { + return dsName + "_" + key; + }*/ + return key; + } + + /** + * 获得一个Cache,没有则显示日志。 + * + * @param cacheName + * @return + */ + protected static Cache getCache(String cacheName) { + Cache cache = cacheManager.getCache(cacheName); + if (cache == null) { + throw new RuntimeException("当前系统中没有定义“" + cacheName + "”这个缓存。"); + } + return cache; + } + +} diff --git a/src/main/java/com/ruoyi/common/utils/DictUtils.java b/src/main/java/com/ruoyi/common/utils/DictUtils.java new file mode 100644 index 000000000..5a76d2ac8 --- /dev/null +++ b/src/main/java/com/ruoyi/common/utils/DictUtils.java @@ -0,0 +1,58 @@ +/** + * Copyright © 2018 All rights reserved. + */ +package com.ruoyi.common.utils; + +import com.ruoyi.project.system.dict.domain.DictData; +import com.ruoyi.project.system.dict.mapper.DictDataMapper; + +import java.util.List; + +/** + * 字典工具类 + * + * @author yawu_bear + * @date 2018-08-10 + */ + +public class DictUtils { + + private static DictDataMapper dictDataMapper = SpringUtil.getBean(DictDataMapper.class); + + public static final String DICT_CACHE = "dictCache"; + public static final String DICT_CACHE_TYPE = "type_"; + + /** + * 根据类型和键值获取标签 + * + * @param type + * @param value + * @return + */ + public static String getDictLabel(String type, String value) { + String label = ""; + if (StringUtils.isNotBlank(type) && StringUtils.isNotBlank(value)) { + for (DictData dictData : getDataByType(type)) { + if (label.equals(dictData.getDictValue())) { + label = dictData.getDictLabel(); + } + } + } + return label; + } + + /** + * 根据type获取data列表 + * + * @param dictType + * @return + */ + public static List getDataByType(String dictType) { + List dictList = (List) CacheUtils.get(DICT_CACHE, DICT_CACHE_TYPE + dictType); + if (StringUtils.isEmpty(dictList)) { + dictList = dictDataMapper.selectDictDataByType(dictType); + CacheUtils.put(DICT_CACHE, DICT_CACHE_TYPE + dictType, dictList); + } + return dictList; + } +} diff --git a/src/main/java/com/ruoyi/common/utils/SpringUtil.java b/src/main/java/com/ruoyi/common/utils/SpringUtil.java new file mode 100644 index 000000000..6c2ec9168 --- /dev/null +++ b/src/main/java/com/ruoyi/common/utils/SpringUtil.java @@ -0,0 +1,77 @@ +package com.ruoyi.common.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * SpringUtil 工具类 + * @author yawu_bear + * @date 2018-08-10 + */ +@Component +public class SpringUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + if (SpringUtil.applicationContext == null) { + SpringUtil.applicationContext = applicationContext; + } + System.out.println("---------------------------------------------------------------------"); + System.out.println("---------------------------------------------------------------------"); + System.out.println("---------------me.shijunjie.util.SpringUtil------------------------------------------------------"); + System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext=" + SpringUtil.applicationContext + "========"); + System.out.println("---------------------------------------------------------------------"); + } + + /** + * 获取applicationContext + * @return + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + /** + * 通过name获取Bean. + * @param name + * @return + */ + public static Object getBean(String name) { + return getApplicationContext().getBean(name); + } + + /** + * 通过class获取Bean. + * @param clazz + * @param + * @return + */ + public static T getBean(Class clazz) { + return getApplicationContext().getBean(clazz); + } + + /** + * 通过name,以及Clazz返回指定的Bean. + * @param name + * @param clazz + * @param + * @return + */ + public static T getBean(String name, Class clazz) { + return getApplicationContext().getBean(name, clazz); + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * @param name + * @return + */ + public static boolean containsBean(String name) { + return applicationContext.containsBean(name); + } + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java b/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java index 1265c45e0..ea4b42e7e 100644 --- a/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java @@ -1,6 +1,9 @@ package com.ruoyi.project.system.dict.service; import java.util.List; + +import com.ruoyi.common.utils.CacheUtils; +import com.ruoyi.common.utils.DictUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.common.support.Convert; @@ -10,7 +13,7 @@ import com.ruoyi.project.system.dict.mapper.DictDataMapper; /** * 字典 业务层处理 - * + * * @author ruoyi */ @Service @@ -21,7 +24,7 @@ public class DictDataServiceImpl implements IDictDataService /** * 根据条件分页查询字典数据 - * + * * @param dictData 字典数据信息 * @return 字典数据集合信息 */ @@ -33,19 +36,20 @@ public class DictDataServiceImpl implements IDictDataService /** * 根据字典类型查询字典数据 - * + * * @param dictType 字典类型 * @return 字典数据集合信息 */ @Override public List selectDictDataByType(String dictType) { - return dictDataMapper.selectDictDataByType(dictType); +// return dictDataMapper.selectDictDataByType(dictType); + return DictUtils.getDataByType(dictType); } /** * 根据字典类型和字典键值查询字典数据信息 - * + * * @param dictType 字典类型 * @param dictValue 字典键值 * @return 字典标签 @@ -53,12 +57,13 @@ public class DictDataServiceImpl implements IDictDataService @Override public String selectDictLabel(String dictType, String dictValue) { - return dictDataMapper.selectDictLabel(dictType, dictValue); +// return dictDataMapper.selectDictLabel(dictType, dictValue); + return DictUtils.getDictLabel(dictType, dictValue); } /** * 根据字典数据ID查询信息 - * + * * @param dictCode 字典数据ID * @return 字典数据 */ @@ -70,7 +75,7 @@ public class DictDataServiceImpl implements IDictDataService /** * 通过字典ID删除字典数据信息 - * + * * @param dictCode 字典数据ID * @return 结果 */ @@ -82,7 +87,7 @@ public class DictDataServiceImpl implements IDictDataService /** * 批量删除字典数据 - * + * * @param ids 需要删除的数据 * @return 结果 */ @@ -94,7 +99,7 @@ public class DictDataServiceImpl implements IDictDataService /** * 新增保存字典数据信息 - * + * * @param dictData 字典数据信息 * @return 结果 */ @@ -102,12 +107,20 @@ public class DictDataServiceImpl implements IDictDataService public int insertDictData(DictData dictData) { dictData.setCreateBy(ShiroUtils.getLoginName()); - return dictDataMapper.insertDictData(dictData); + String dictType = dictData.getDictType(); + int row = dictDataMapper.insertDictData(dictData); + if(row > 0) { + // 新增成功修改缓存信息 + List dictList = dictDataMapper.selectDictDataByType(dictType); + CacheUtils.remove(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType); + CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType, dictList); + } + return row; } /** * 修改保存字典数据信息 - * + * * @param dictData 字典数据信息 * @return 结果 */ @@ -115,7 +128,15 @@ public class DictDataServiceImpl implements IDictDataService public int updateDictData(DictData dictData) { dictData.setUpdateBy(ShiroUtils.getLoginName()); - return dictDataMapper.updateDictData(dictData); + String dictType = dictData.getDictType(); + int row = dictDataMapper.updateDictData(dictData); + if(row > 0) { + List dictList = dictDataMapper.selectDictDataByType(dictType); + // 修改成功更新缓存信息 + CacheUtils.remove(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType); + CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType, dictList); + } + return row; } } diff --git a/src/main/resources/ehcache/ehcache-shiro.xml b/src/main/resources/ehcache/ehcache-shiro.xml index aff3b64b2..92f9e6a14 100644 --- a/src/main/resources/ehcache/ehcache-shiro.xml +++ b/src/main/resources/ehcache/ehcache-shiro.xml @@ -23,5 +23,15 @@ statistics="true"> + + + \ No newline at end of file From a743ce4bfbf2eac0523de09769e030a8a6fab3fa Mon Sep 17 00:00:00 2001 From: yawu_bear Date: Fri, 10 Aug 2018 17:15:08 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=AD=97=E5=85=B8=E7=BC=93=E5=AD=98=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/utils/DictUtils.java | 33 +++++++++++++++++++ .../dict/service/DictDataServiceImpl.java | 24 ++++++-------- src/main/resources/application-druid.yml | 4 +-- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/ruoyi/common/utils/DictUtils.java b/src/main/java/com/ruoyi/common/utils/DictUtils.java index 5a76d2ac8..bf656203c 100644 --- a/src/main/java/com/ruoyi/common/utils/DictUtils.java +++ b/src/main/java/com/ruoyi/common/utils/DictUtils.java @@ -55,4 +55,37 @@ public class DictUtils { } return dictList; } + + /** + * 增删改字典缓存刷新 + * + * @param dictType + * @param row + */ + public static void flushDictList(String dictType, int row) { + if (row > 0) { + // 增删改成功修改缓存信息 + List dictList = dictDataMapper.selectDictDataByType(dictType); + CacheUtils.remove(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType); + CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType, dictList); + } + } + + /** + * 缓存重置 + * + * @param row + */ + public static void restAllDictList(int row) { + if (row > 0) { + // 增删改成功修改缓存信息 + List dictList = dictDataMapper.selectDictDataList(new DictData()); + if (StringUtils.isNotEmpty(dictList)) { + for (DictData dictData : dictList) { + CacheUtils.removeAll(DictUtils.DICT_CACHE); + CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictData.getDictType(), dictList); + } + } + } + } } diff --git a/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java b/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java index ea4b42e7e..789ef8bf8 100644 --- a/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java @@ -82,7 +82,11 @@ public class DictDataServiceImpl implements IDictDataService @Override public int deleteDictDataById(Long dictCode) { - return dictDataMapper.deleteDictDataById(dictCode); + DictData dictData = dictDataMapper.selectDictDataById(dictCode); + String dictType = dictData.getDictType(); + int row = dictDataMapper.deleteDictDataById(dictCode); + DictUtils.flushDictList(dictType, row); + return row; } /** @@ -94,7 +98,9 @@ public class DictDataServiceImpl implements IDictDataService @Override public int deleteDictDataByIds(String ids) { - return dictDataMapper.deleteDictDataByIds(Convert.toStrArray(ids)); + int row = dictDataMapper.deleteDictDataByIds(Convert.toStrArray(ids)); + DictUtils.restAllDictList(row); + return row; } /** @@ -109,12 +115,7 @@ public class DictDataServiceImpl implements IDictDataService dictData.setCreateBy(ShiroUtils.getLoginName()); String dictType = dictData.getDictType(); int row = dictDataMapper.insertDictData(dictData); - if(row > 0) { - // 新增成功修改缓存信息 - List dictList = dictDataMapper.selectDictDataByType(dictType); - CacheUtils.remove(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType); - CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType, dictList); - } + DictUtils.flushDictList(dictType, row); return row; } @@ -130,12 +131,7 @@ public class DictDataServiceImpl implements IDictDataService dictData.setUpdateBy(ShiroUtils.getLoginName()); String dictType = dictData.getDictType(); int row = dictDataMapper.updateDictData(dictData); - if(row > 0) { - List dictList = dictDataMapper.selectDictDataByType(dictType); - // 修改成功更新缓存信息 - CacheUtils.remove(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType); - CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType, dictList); - } + DictUtils.flushDictList(dictType, row); return row; } diff --git a/src/main/resources/application-druid.yml b/src/main/resources/application-druid.yml index f5dda0f4f..871c22a82 100644 --- a/src/main/resources/application-druid.yml +++ b/src/main/resources/application-druid.yml @@ -5,9 +5,9 @@ spring: driverClassName: com.mysql.jdbc.Driver druid: master: #主库 - url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true + url: jdbc:mysql://192.168.0.132:3306/rys?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true username: root - password: password + password: 123456 #slave: #从库 # open: true # url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true From b8e55b8d169a1c689cf9c0e265a70fd6770d80ab Mon Sep 17 00:00:00 2001 From: yawu_bear Date: Fri, 10 Aug 2018 17:16:59 +0800 Subject: [PATCH 3/3] =?UTF-8?q?Revert=20"=E6=89=B9=E9=87=8F=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=AD=97=E5=85=B8=E7=BC=93=E5=AD=98=E5=88=B7=E6=96=B0?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a743ce4 --- .../com/ruoyi/common/utils/DictUtils.java | 33 ------------------- .../dict/service/DictDataServiceImpl.java | 24 ++++++++------ 2 files changed, 14 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/ruoyi/common/utils/DictUtils.java b/src/main/java/com/ruoyi/common/utils/DictUtils.java index bf656203c..5a76d2ac8 100644 --- a/src/main/java/com/ruoyi/common/utils/DictUtils.java +++ b/src/main/java/com/ruoyi/common/utils/DictUtils.java @@ -55,37 +55,4 @@ public class DictUtils { } return dictList; } - - /** - * 增删改字典缓存刷新 - * - * @param dictType - * @param row - */ - public static void flushDictList(String dictType, int row) { - if (row > 0) { - // 增删改成功修改缓存信息 - List dictList = dictDataMapper.selectDictDataByType(dictType); - CacheUtils.remove(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType); - CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType, dictList); - } - } - - /** - * 缓存重置 - * - * @param row - */ - public static void restAllDictList(int row) { - if (row > 0) { - // 增删改成功修改缓存信息 - List dictList = dictDataMapper.selectDictDataList(new DictData()); - if (StringUtils.isNotEmpty(dictList)) { - for (DictData dictData : dictList) { - CacheUtils.removeAll(DictUtils.DICT_CACHE); - CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictData.getDictType(), dictList); - } - } - } - } } diff --git a/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java b/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java index 789ef8bf8..ea4b42e7e 100644 --- a/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java @@ -82,11 +82,7 @@ public class DictDataServiceImpl implements IDictDataService @Override public int deleteDictDataById(Long dictCode) { - DictData dictData = dictDataMapper.selectDictDataById(dictCode); - String dictType = dictData.getDictType(); - int row = dictDataMapper.deleteDictDataById(dictCode); - DictUtils.flushDictList(dictType, row); - return row; + return dictDataMapper.deleteDictDataById(dictCode); } /** @@ -98,9 +94,7 @@ public class DictDataServiceImpl implements IDictDataService @Override public int deleteDictDataByIds(String ids) { - int row = dictDataMapper.deleteDictDataByIds(Convert.toStrArray(ids)); - DictUtils.restAllDictList(row); - return row; + return dictDataMapper.deleteDictDataByIds(Convert.toStrArray(ids)); } /** @@ -115,7 +109,12 @@ public class DictDataServiceImpl implements IDictDataService dictData.setCreateBy(ShiroUtils.getLoginName()); String dictType = dictData.getDictType(); int row = dictDataMapper.insertDictData(dictData); - DictUtils.flushDictList(dictType, row); + if(row > 0) { + // 新增成功修改缓存信息 + List dictList = dictDataMapper.selectDictDataByType(dictType); + CacheUtils.remove(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType); + CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType, dictList); + } return row; } @@ -131,7 +130,12 @@ public class DictDataServiceImpl implements IDictDataService dictData.setUpdateBy(ShiroUtils.getLoginName()); String dictType = dictData.getDictType(); int row = dictDataMapper.updateDictData(dictData); - DictUtils.flushDictList(dictType, row); + if(row > 0) { + List dictList = dictDataMapper.selectDictDataByType(dictType); + // 修改成功更新缓存信息 + CacheUtils.remove(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType); + CacheUtils.put(DictUtils.DICT_CACHE, DictUtils.DICT_CACHE_TYPE + dictType, dictList); + } return row; }