实现 implements CommandLineRunner接口可以在项目启动的时候触发走run里面的逻辑,

InputStream stream = getClass().getClassLoader().getResourceAsStream(“json/item/ItemDynamicFormSkuNode2.json”);
可以读取项目resources目录下的json/item/ItemDynamicFormSkuNode2.json文件

  1. import org.springframework.boot.CommandLineRunner;
  2. import org.springframework.stereotype.Component;
  3. import java.io.*;
  4. @Component
  5. public class TestCommandLineRunner implements CommandLineRunner {
  6. @Override
  7. public void run(String... args) throws Exception {
  8. InputStream stream = getClass().getClassLoader().getResourceAsStream("json/item/ItemDynamicFormSkuNode2.json");
  9. //这里可以加载配置文件
  10. String s = inputStreamToString(stream);
  11. System.out.println("TestCommandLineRunner.run");
  12. System.err.println("这里可以加载配置文件");
  13. }
  14. private String inputStreamToString(InputStream inputStream) {
  15. StringBuffer buffer = new StringBuffer();
  16. InputStreamReader inputStreamReader;
  17. try {
  18. inputStreamReader = new InputStreamReader(inputStream, "utf-8");
  19. BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
  20. String str = null;
  21. while ((str = bufferedReader.readLine()) != null) {
  22. buffer.append(str);
  23. }
  24. // 释放资源
  25. bufferedReader.close();
  26. inputStreamReader.close();
  27. inputStream.close();
  28. } catch (UnsupportedEncodingException e) {
  29. e.printStackTrace();
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. return buffer.toString();
  34. }
  35. }

注意点

这里需要注意一个点,就是我本人是dubbo项目,有一次忽然发现dubbo服务已经可以使用的时候,但是 implements CommandLineRunner方法的类的run方法,还没被执行到,这就有可能出现业务逻辑错误

我当时解决办法就是在业务代码获取这个属性的时候先判断是否是null,如果是null的话就立即去读取配置文件加载数据,如果不是null的话,就回去这个值的数据.