map实现缓存
测试结果
数据库表
ConfigPool.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | package com.alphajuns.ssm.util; import com.alphajuns.ssm.pojo.Config; import com.alphajuns.ssm.service.ConfigService; import java.util.HashMap; import java.util.List; import java.util.Map; public class ConfigPool { /** * 参数表的缓存map */ private static AbstractTimeCachedObject cachedConfigPool = new AbstractTimeCachedObject( AbstractTimeCachedObject.CONFIG_CACHEDTIME) { @Override public Object refreshCachedObject(Object params) { return new HashMap<String, Config>(); } }; /** * * <p> * Description: 得到缓存中的对象 * </p> * * @param enforce boolean * @return Map Map */ @SuppressWarnings ( "unchecked" ) public static Map<String, Config> getCachedConfigPool( boolean enforce) { return (Map<String, Config>) cachedConfigPool.getCachedObject( null , enforce); } /** * * <p> * Description: 得到参数 * </p> * * @param configKey String * @return Config Config */ public static Config getGroupConfig(String group,String configKey) { Map<String, Config> configMap; configMap = getCachedConfigPool( false ); System.out.println( "获取到的map:" + System.identityHashCode(configMap)); Config config; config = configMap.get(group+ "." +configKey); if (EmptyUtil.isEmpty(config)) { ConfigService configService = null ; configService = (ConfigService) com.alphajuns.ssm.util.SpringContextUtil.getBean( "configServiceImpl" ); Map<String,String> map = new HashMap<String,String>(); map.put( "configGroup" , group); map.put( "configKey" , configKey); config = configService.queryConfigByGroupKey(map); configMap.put(group+ "." +configKey, config); } return config; } /** * 通过key得到值 * @param configKey * @return */ public static String getConfigValue(String configKey){ String value = "" ; Config config = getGroupConfig( null ,configKey); if (config!= null ){ value = config.getConfigValue(); } return value; } /** * 通过group,key得到值 * @param configKey * @return */ public static String getConfigValue(String group, String configKey){ String value = "" ; Config config = getGroupConfig(group,configKey); if (config!= null ){ value = config.getConfigValue(); } return value; } public static List<Map<String,?>> getConfigsByGroup(String group){ ConfigService configService = null ; configService = (ConfigService) com.alphajuns.ssm.util.SpringContextUtil.getBean( "configServiceImpl" ); Map<String,Object> queryConfigMap = new HashMap<String,Object>(); queryConfigMap.put( "configGroup" , group); List<Map<String,?>> configList = configService.queryConfigListByGroup(queryConfigMap); return configList; } } |
AbstractTimeCachedObject.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | package com.alphajuns.ssm.util; public abstract class AbstractTimeCachedObject { /** * */ private static final long MILLS_PER_MINTUE = 60 * 1000 ; /** * CONFIG_CACHEDTIME */ public static final int CONFIG_CACHEDTIME = 30 ; /** * */ protected long cachedMinutes = 5L; /** * */ private long expiredTimeSlot = 0 ; /** * */ private Object cachedObject = null ; /** * <p>Description: AbstractTimeCachedObject</p> */ public AbstractTimeCachedObject() { } /** * <p>Description: AbstractTimeCachedObject</p> * @param minutes minutes */ public AbstractTimeCachedObject( int minutes) { this .cachedMinutes = minutes; } public final boolean isExpired() { return (System.currentTimeMillis() > this .expiredTimeSlot); } /** * <p>Description: getCachedObject</p> * @param params params * @param enforce enforce * @return Object */ public final synchronized Object getCachedObject(Object params, boolean enforce) { if (enforce || isExpired()) { setCachedObject(refreshCachedObject(params)); } return this .cachedObject; } /** * <p>Description: getCachedObject</p> * @param params params * @return Object */ public final Object getCachedObject(Object params) { return getCachedObject(params, false ); } /** * <p>Description: setCachedObject</p> * @param cachedObject cachedObject */ public final void setCachedObject(Object cachedObject) { this .cachedObject = cachedObject; this .expiredTimeSlot = System.currentTimeMillis() + this .cachedMinutes * MILLS_PER_MINTUE; } /** * <p>Description: refreshCachedObject</p> * @param params params * @return Object */ public abstract Object refreshCachedObject(Object params); } |
Config.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | package com.alphajuns.ssm.pojo; public class Config { private String configGroup; /** * 参数键 */ private String configKey; /** * 参数值 */ private String configValue; /** * 描述 */ private String description; /** * * <p> * 总数: TODO * </p> * */ private int total; public String getConfigKey() { return this .configKey; } public void setConfigKey(String configKey) { this .configKey = configKey; } public String getConfigValue() { return this .configValue; } public void setConfigValue(String configValue) { this .configValue = configValue; } public String getDescription() { return this .description; } public void setDescription(String description) { this .description = description; } public int getTotal() { return this .total; } public void setTotal( int total) { this .total = total; } public String getConfigGroup() { return configGroup; } public void setConfigGroup(String configGroup) { this .configGroup = configGroup; } public String toString(){ return "group:" + this .configGroup+ ",key:" + this .configKey+ ",value:" + this .configValue; } } |
ConfigService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package com.alphajuns.ssm.service; import com.alphajuns.ssm.pojo.Config; import java.util.List; import java.util.Map; public interface ConfigService { /** * search key * @param configKey * @return */ public Config queryConfigByKey(String configKey); /** * 通过group 和key搜索 * @param queryConfigMap * @return */ public Config queryConfigByGroupKey(Map<String,?> queryConfigMap); /** * queryConfigListByGroup * @param queryConfigMap * @return */ public List<Map<String,?>> queryConfigListByGroup(Map<String,?> queryConfigMap); /** * * @Description 查询二期 * @author fanj * @date 2019年11月20日 * @param queryConfigMap * @return */ public List<Map<String,?>> queryTpmeConfigListByGroup(Map<String,?> queryConfigMap); } |
ConfigServiceImpl.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | package com.alphajuns.ssm.service.impl; import com.alphajuns.ssm.mybatis.ConfigMapper; import com.alphajuns.ssm.pojo.Config; import com.alphajuns.ssm.service.ConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; @Service public class ConfigServiceImpl implements ConfigService { @Autowired private ConfigMapper configMapper; @Override public Config queryConfigByKey(String configKey) { // TODO Auto-generated method stub return configMapper.queryConfigByKey(configKey); } public Config queryConfigByGroupKey(Map<String,?> queryConfigMap){ return configMapper.queryConfigByGroupKey(queryConfigMap); } public List<Map<String,?>> queryConfigListByGroup(Map<String,?> queryConfigMap){ return configMapper.queryConfigListByGroup(queryConfigMap); } @Override public List<Map<String, ?>> queryTpmeConfigListByGroup(Map<String, ?> queryConfigMap) { return configMapper.queryTpmeConfigListByGroup(queryConfigMap); } } |
ConfigMapper.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package com.alphajuns.ssm.mybatis; import com.alphajuns.ssm.pojo.Config; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; public interface ConfigMapper { public abstract Config queryConfigByKey( @Param ( "configKey" ) String configKey); public abstract Config queryConfigByGroupKey(Map<String,?> queryConfigMap); public abstract List<Map<String,?>> queryConfigListByGroup(Map<String,?> queryConfigMap); public abstract List<Map<String, ?>> queryTpmeConfigListByGroup(Map<String, ?> queryConfigMap); } |
ConfigMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.alphajuns.ssm.mybatis.ConfigMapper" > <resultMap id="BaseResultMap" type="com.alphajuns.ssm.pojo.Config" > <id column="config_key" property="configKey" jdbcType="VARCHAR" /> <result column="config_group" property="configGroup" jdbcType="VARCHAR" /> <result column="config_value" property="configValue" jdbcType="VARCHAR" /> <result column="description" property="description" jdbcType="VARCHAR" /> </resultMap> <select id="queryConfigByKey" resultMap="BaseResultMap" parameterType="java.lang.String" > select T.config_key, T.config_value, T.description from CONFIG T where t.config_key = #{configKey,jdbcType=VARCHAR} </select> <select id="queryConfigByGroupKey" resultMap="BaseResultMap" parameterType="map" > select T.config_key, T.config_value, T.config_group, T.description from CONFIG T where t.config_key = #{configKey,jdbcType=VARCHAR} <choose> <when test="configGroup!=null and configGroup!=''"> and T.config_group=#{configGroup,jdbcType=VARCHAR} </when> <otherwise> and t.config_group is null or t.config_group='' </otherwise> </choose> </select> <select id="queryConfigListByGroup" resultType="map" parameterType="java.lang.String" > select T.config_group, T.config_key, T.config_value, T.description from CONFIG T where t.config_group = #{configGroup,jdbcType=VARCHAR} </select> <select id="queryTpmeConfigListByGroup" resultType="map" parameterType="java.lang.String" > select T.config_group, T.config_key, T.config_value, T.description <!-- 这里查询配置,拼接一个config_key、config_value返回 fanj 20191120 --> , (T.config_value||T.config_key) AS CONFIG_VALUE_AND_CONFIG_KEY from CONFIG T where t.config_group = #{configGroup,jdbcType=VARCHAR} </select> </mapper>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现