实现 implements CommandLineRunner接口可以在项目启动的时候触发走run里面的逻辑,
InputStream stream = getClass().getClassLoader().getResourceAsStream(“json/item/ItemDynamicFormSkuNode2.json”);
可以读取项目resources目录下的json/item/ItemDynamicFormSkuNode2.json文件
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.io.*;
@Component
public class TestCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
InputStream stream = getClass().getClassLoader().getResourceAsStream("json/item/ItemDynamicFormSkuNode2.json");
//这里可以加载配置文件
String s = inputStreamToString(stream);
System.out.println("TestCommandLineRunner.run");
System.err.println("这里可以加载配置文件");
}
private String inputStreamToString(InputStream inputStream) {
StringBuffer buffer = new StringBuffer();
InputStreamReader inputStreamReader;
try {
inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
// 释放资源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer.toString();
}
}
注意点
这里需要注意一个点,就是我本人是dubbo项目,有一次忽然发现dubbo服务已经可以使用的时候,但是 implements CommandLineRunner方法的类的run方法,还没被执行到,这就有可能出现业务逻辑错误
我当时解决办法就是在业务代码获取这个属性的时候先判断是否是null,如果是null的话就立即去读取配置文件加载数据,如果不是null的话,就回去这个值的数据.