有时候我们需要在启动工程的时候,加载一些数据,赋值给静态全局变量(例如:数据字典,配置信息等),这是可以这麽做:
新建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<String,Object> map=new HashMap<String,Object>();
public static List<String> fileList=new ArrayList<String>();
@Override
public void run(ApplicationArguments args) {
//初始化数据字典
List<DicMap> 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);
}