springboot 启动加载全局缓存

有时候我们需要在启动工程的时候,加载一些数据,赋值给静态全局变量(例如:数据字典,配置信息等),这是可以这麽做:

新建class 实现 ApplicationRunner 类,重写方法就行了,然后就可以在项目任何一个地方使用了

注意:此作用是用于查询数据库中配置信息的,且只在启动的时候查一次,如果该参数经常修改建议不要用这种方法。如果数据库配置修改了,一定要重新启动该项目才能生效

下边是我写的一个例子

package com.example.quartz.dynamic.config;

import com.example.quartz.dynamic.entity.DicMap;
import com.example.quartz.dynamic.service.DicService;
import com.example.quartz.dynamic.service.IJobAndTriggerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*;

/**
 * @Auther: lizk
 * @Date: 2019/8/2 14:21
 * @Description:
 */
@Component
public class ApplicationRunnerTest implements ApplicationRunner {

    @Autowired
    private DicService dicService;
    @Value("${txtFilePath}")
    private String txtFilePath;

    public static Map map=new HashMap();

    public static List fileList=new ArrayList();

    @Override
    public void run(ApplicationArguments args) {
        //初始化数据字典
        List dicMaps=dicService.findAll();
        for(DicMap dicMap:dicMaps){
            map.put(dicMap.getValue(),dicMap.getValue());
        }
        try {
            //初始化文件namemap
            FileInputStream fis=new FileInputStream(txtFilePath);
            InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            String line="";
            while ((line=br.readLine())!=null) {
                if(!line.equals("")){
                    //转小写,去除空格和空白字符
                    fileList.add(line.trim());
                }
            }
            //关闭输入流
            br.close();
            isr.close();
            fis.close();
        }catch (Exception e){
            System.out.println("文件找不到");
        }

        //读取filename txt文件(每一行是一个文件名)
        System.out.println("ApplicationRunner start");
        System.out.println(fileList.size()+"------------------------------");
    }
}

 

 

使用:

                    //判断是否在字典里
                    if(ApplicationRunnerTest.map.containsKey(s.replaceAll("\\s*", ""))){
                        break;
                    }else{
                        str=str+s;
                        removeStr.add(s);
                    }

 

你可能感兴趣的:(springboot学习)