如何再程序启动时初始化数据活执行其它业务

Posted TGB-Earnest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何再程序启动时初始化数据活执行其它业务相关的知识,希望对你有一定的参考价值。

方式一

@Component
public class PostConstructInit 
    /**
     * 如何再程序启动时初始化数据活执行其它业务
     *
     * @PostConstruct 用来修饰一个非静态的void()方法,当bean创建完成的时候,会仅且执行一次
     * 作用:初始化数据
     * 例如:加载数据库中的数据字典 缓存 到redis中
     */
    @PostConstruct
    public void init()
        System.out.println("PostConstruct   进行......");
    

方式二

@Component
public class InitializingBeanInit implements InitializingBean 
    @Override
    public void afterPropertiesSet() throws Exception 
        System.out.println("实现InitializingBean ------>");
    

方式三

@Component
public class CommandLineInit implements CommandLineRunner 
    @Override
    public void run(String... args) throws Exception 
        System.out.println("实现CommandLineRunner - ---- >进行");
    

例子

    @PostConstruct
    private void initDicInfosourceData() 
        List<CrmDictionary> list = crmDictionaryMapper.getAllDict();
        Set keys;
        if (list.size()>0)
            // 删除缓存数据
            keys = redisTemplate.keys(RedisKeyUtil.getDictionaryHashKey("*"));
            redisTemplate.delete(keys);
            Map<String, List<CrmDictionary>> listMap = list.stream().collect(Collectors.groupingBy(CrmDictionary::getType));
            String type;
            Map<String, String> map = new HashMap<>();
            for (Map.Entry<String, List<CrmDictionary>> entry : listMap.entrySet()) 
                type = entry.getKey();
                map.clear();
                entry.getValue().stream().forEach(e -> 
                    map.put( e.getKey(), e.getValue());
                    map.put(e.getValue(), e.getKey());
                );
                redisTemplate.opsForHash().putAll(RedisKeyUtil.getDictionaryHashKey(type), map);
            
        else 
            log.warn("=================crm_dictionary字典数据初始化时为空===================");
        
        // 删除缓存数据
        keys = redisTemplate.keys(RedisKeyUtil.getDictionaryListKey("*"));
        redisTemplate.delete(keys);
    

以上是关于如何再程序启动时初始化数据活执行其它业务的主要内容,如果未能解决你的问题,请参考以下文章

如何再程序启动时初始化数据活执行其它业务

双活数据建设方案

Spring框架 ? 项目启动时执行特定处理及ApplicationListener源码分析

linux开机自启动命令

如何使用 rest API 在应用程序启动时正确初始化 Vuex 商店?

SpringBoot程序启动时执行初始化代码