Springboot打jar包部署异常
2020-04-21 10:13:39.057[http-nio-8888-exec-9] ERROR jar:file:/opt/intelligence/intelligence_analysis-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/application.properties (没有那个文件或目录)
java.io.FileNotFoundException: jar:file:/opt/intelligence/intelligence_analysis-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/application.properties (没有那个文件或目录)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at com.intple.common.config.PropertyPlaceholderConfigurer.<clinit>
...
项目中读取配置文件的代码为:new FileInputStream(path)。idea环境中可以正常使用,打成jar包后运行就会抛异常,
使用下面两种方法可以解决:
InputStream is=this.getClass().getResourceAsStream(path);
BufferedReader br=new BufferedReader(new InputStreamReader(is));
Resource resource = new ClassPathResource(path);
InputStream inputStream = resource.getInputStream();
原因是:在调试过程中(没有打包成Jar),文件是真实存在于磁盘的某个目录。此时通过获取文件路径,是可以正常读取的,因为文件确实存在。
而打包成jar以后,实际上文件是存在于jar这个文件里面的资源文件。在磁盘是没有真实路径的。无法根据路径获取文件。
而InputStream inputStream=this.getClass().getResourceAsStream("");会指定要加载的资源路径与当前类所在包的路径一致。