【Java】将数据库中的配置信息存储到系统缓存当中并实现读取


前言

实际上本文算是延续上一篇文章的内容了,本文要讲的是将存储在数据库中的系统配置文件,全部从数据库中查询出来,存储在系统缓存当中。这样每次读取配置信息就可以不用一直去查询数据库添加数据库的负担了。后续也会更新存储在redis中的方法。请持续关注!


提示:以下是本篇文章正文内容,下面案例可供参考

一、创建配置信息业务层

代码如下:

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author 孤巷.
 * @description 初始化数据业务层
 * @date 2023/3/9 下午 5:20
 */
@Service
@Slf4j
public class InitDataService {
    
    

    @Resource//这个Dao我就不贴代码了,根据自己数据库配置信息的实际情况填就行
    WeChatConfigDao weChatConfigDao;

    /**
     * 系统配置
     */
    private static final Map<String, String> WECHAT_CONFIG_MAP = new ConcurrentHashMap<>();


    /**
     * 初始化系统配置
     */
    public synchronized void initWeChatConfigMap() {
    
    
        //这里就是要查询出来所有的配置文件,根据自己实际情况进行修改吧
        List<WeChatConfigEntity> list = weChatConfigDao.getByAll();
        //循环添加到缓存Map中去,如果数据查出来有加密的顺便解个密就好了,我这里用的是Base64
        for (WeChatConfigEntity mode : list) {
    
    
           //这个判断就是是否加密,和是否开启配置的判断,如果你没有这个字段也可以不写
            if (mode.getActive() == 1 && mode.getType() == 1) {
    
    
                //对查询出来的数据进行解密
                String values = Base64Util.decode(mode.getValue());
                //存入缓存
                WECHAT_CONFIG_MAP.put(mode.getFlag(), values);
            } else {
    
    
                //存入缓存
                WECHAT_CONFIG_MAP.put(mode.getFlag(), mode.getValue());
            }
        }
    }

    public static void updateWechatConfigMap(String flag, String value) {
    
    
        //存入缓存
        WECHAT_CONFIG_MAP.put(flag, value);
    }


    /**
     * 获取字符串类型配置
     *
     * @param flag 配置编码
     * @return String
     */
    public String getStringValue(String flag) {
    
    
        String value = WECHAT_CONFIG_MAP.get(flag);
        // 获取到的机构为空,则重新初始化
        if (MyStringUtil.isEmpty(value)) {
    
    
            initWeChatConfigMap();
            log.debug("重新初始化系统配置");
        }
        value = WECHAT_CONFIG_MAP.get(flag);
        if (MyStringUtil.isEmpty(value)) {
    
    
            log.error("系统配置异常 == key:{},value:{}", flag, value);
            throw new SysConfigException("系统配置异常");
        }
        return value;
    }

    /**
     * 获取Integer类型配置
     *
     * @param flag 配置编码
     * @return String
     */
    public Integer getIntegerValue(String flag) {
    
    
        String value = WECHAT_CONFIG_MAP.get(flag);
        // 获取到的机构为空,则重新初始化
        if (MyStringUtil.isEmpty(value)) {
    
    
            initWeChatConfigMap();
            log.debug("重新初始化系统配置");
        }
        value = WECHAT_CONFIG_MAP.get(flag);
        if (MyStringUtil.isEmpty(value)) {
    
    
            log.error("系统配置异常 == key:{},value:{}", flag, value);
            throw new SysConfigException("系统配置异常");
        }
        return Integer.parseInt(value);
    }


    /**
     * 获取所有配置信息
     *
     * @return Map
     */
    public static Map<String, String> getAll() {
    
    
        return WECHAT_CONFIG_MAP;
    }
}

二、使用步骤

调用的话就非常简单了,也是一行代码;利用键值对形式,看看你存进去的MAP中的KEY是什么,那就根据KEY去取就可以了;代码如下:

initDataService.getStringValue(name);

总结

这种方式还是比较好用的,如果说对于那种数据比较多的情况,建议还是使用Redis缓存进行存储,就不要用系统缓存了哦!

猜你喜欢

转载自blog.csdn.net/qq_42666609/article/details/130202042
今日推荐