[Java] Stockez les informations de configuration de la base de données dans le cache système et lisez-les


Préface

En fait, cet article est une continuation de l'article précédent. Cet article va parler d'interroger tous les fichiers de configuration système stockés dans la base de données à partir de la base de données et de les stocker dans le cache système. De cette façon, chaque fois que vous lisez les informations de configuration, vous n'avez pas besoin d'interroger la base de données à tout moment et d'ajouter la charge de la base de données. Les méthodes stockées dans Redis seront également mises à jour ultérieurement. S'il vous plaît restez à l'écoute!


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

1. Créer la couche métier des informations de configuration

le code s'affiche comme ci-dessous :

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;
    }
}

2. Étapes d'utilisation

L'appel est très simple, c'est aussi une ligne de code ; utilisez le format de paire clé-valeur pour voir quelle est la KEY dans la MAP que vous avez enregistrée, puis récupérez-la simplement en fonction de la KEY ; le code est le suivant :

initDataService.getStringValue(name);

Résumer

Cette méthode est relativement simple à utiliser : s'il y a beaucoup de données, il est recommandé d'utiliser le cache Redis pour le stockage au lieu d'utiliser le cache système !

Guess you like

Origin blog.csdn.net/qq_42666609/article/details/130202042