springboot 打成的jar包在ClassLoader().getResource方法读取文件为null
1、属性文件如下:
10001=错误
2、文件读取主要代码
// getResource方式 URL resourceURI = getClass().getClassLoader().getResource(""); // getResourceAsStream方式 InputStream stream = getClass().getClassLoader().getResourceAsStream("errorCode.properties"); logger.info(">>>>>>>>>>>>>>>>>>>>>> errorCode stream " + stream); logger.info(">>>>>>>>>>>>>>>>>>>>>> resourceURI " + resourceURI); if (null == stream) { logger.warn("errorCode.properties file not find"); return; } InputStreamReader reader = new InputStreamReader(stream,"UTF-8"); properties.load(reader); Enumeration<?> keys = properties.propertyNames(); while(keys.hasMoreElements()) { String key = (String) keys.nextElement(); String value = properties.getProperty(key); logger.info("key :" + key + "- value:" + value); }
2.1 使用idea启动读取测试
2.2 使用java -jar xxx.jar启动测试
从运行结果来看,使用getResourceAsStream方式可以读到jar中的文件,而使用getResource读取为空,在jar文件中查找资源和在文件系统中查找资源的方式是不一样的,尽量使用Stream流的方式操作资源文件。
使用spring-boot-maven-plugin插件打出的fat-jar是不可以作为其他应用的jar依赖的,因为无法向普通的依赖jar那样去读取jar中的一些文件,这个和spring-boot-maven-plugin打包机制有关,可以换成使用maven-jar-plugin插件替换进行成可运行的的jar