springboot在项目启动时加载字典表数据进map内存,真实测试通过。

本文介绍如何在SpringBoot项目启动时,通过配置和编写代码将字典表数据加载到Map内存中,实现静态化,提高查询效率。实际测试已验证此方法可行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class DicMap {
    @Autowired
    private static CustomerDao customerDao;
    private static HashMap<String,String> hashMap=new HashMap<>();
    static {
        //在这里我们不能使用注入进来的customerDao,因为它此时还没有被创建出来,所以我们要在系统
        //运行的时候获取项目的上下文手动去获取这个bean
        customerDao = SpringUtil.getBean(CustomerDao.class);
        queryDic();
    }
    //把字典信息放到map中
    public static void queryDic(){
        List<Dictionary> dics=customerDao.findAllDictionary();
        for (int i = 0; i < dics.size(); i++) {
            Dictionary dic = dics.get(i);
            String divi = dic.getDivi();
            Integer code = dic.getCode();
            String value = dic.getVal();
            String key=divi+code;
            hashMap.put(key,value);
        }
    }
    //获取字典信息的具体方法
    public static String getDicVal(String divi,Integer code){
        String key=divi+code;
        String val = hashMap.get(key);
        return val;
    }
}

 

package com.yzt.demo.util;


import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@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
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    //通过name获取 Bean.
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    //通过class获取Bean.
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }

    //通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }

}

### Spring Boot配置项存储于系统字典表中的方法 #### 将Spring Boot配置项存入数据库并动态更新应用设置 为了实现将Spring Boot配置项保存至系统字典表中以便集中管理和灵活调整,可以采用如下方案: 创建一张用于存放配置键值对的数据表`sys_dict_config`。该表格应至少包含字段如id, config_key(配置关键字), config_value (对应的值),以及description(描述)。这允许管理员通过后台界面轻松修改这些参数而无需重启服务。 接着,在应用程序启动阶段初始化时读取此数据源内的所有条目,并将其注册成为Spring Environment的一部分。具体来说,可以通过编写一个实现了`ApplicationListener<ContextRefreshedEvent>`接口的监听器来完成这项工作[^3]。每当上下文刷新事件触发时——即每次部署或重新加载之后都会执行这段逻辑;此时可以从持久层取出最新的设定填充到内存缓存里去。 此外还需要提供API端点供外部调用来实时同步最新更改后的配置信息给各个实例节点知晓。通常做法是在接收到变更通知后立即广播消息队列告知其他成员查询新的版本号从而拉取差异部分做增量式的热更替处理。 最后一步就是确保整个流程的安全性和稳定性了。考虑到并发写冲突的可能性较大,建议引入乐观锁机制防止覆盖他人未提交的工作成果;同时也要做好权限校验措施以免非法篡改核心业务规则造成不可挽回的影响。 ```java // SysDictConfig.java 实体类映射关系定义 @Entity @Table(name="sys_dict_config") public class SysDictConfig { @Id private Long id; private String configKey; private String configValue; private String description; // getter setter methods... } // ConfigService.java 提供对外的服务接口 @Service public class ConfigService { @Autowired private JdbcTemplate jdbcTemplate; public Map<String, Object> getAllConfigs(){ List<SysDictConfig> configs = jdbcTemplate.queryForList( "SELECT * FROM sys_dict_config", new BeanPropertyRowMapper<>(SysDictConfig.class)); return configs.stream().collect(Collectors.toMap(SysDictConfig::getConfigKey, SysDictConfig::getConfigValue)); } } ``` 上述代码片段展示了如何利用JPA实体对象表示字典表结构,并提供了简单的服务层函数用于检索所有的配置记录转换成键值形式返回给调用方使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值