springBoot項目打成jar包給其他項目引用,讀取jar裏面的資源文件失敗

讀取項目中的xml文件

代碼:

	
		SAXReader reader = new SAXReader();
		Document document = reader.read(ResourceUtils.getFile("classpath:application-validation.xml"));
		Element root = document.getRootElement();
			

但是拋出 FileNotFound異常

java.io.FileNotFoundException: class path resource [application-validation.xml] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/usr/local/conet/cloud/conet-ds/DS_V200R002B020.jar!/BOOT-INF/classes!/application-validation.xml
	at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217)
	at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:180)
	at com.validation.ValidationConfigParser.parse(ValidationConfigParser.java:39)
	at com.validation.runner.ValidationRunner.run(ValidationRunner.java:28)
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797)
	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:781)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
	at com.ds.ConetDsApplication.main(ConetDsApplication.java:26)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

原因:

項目打成jar包後,資源文件也存在於jar包中,文件的絕對路徑是jar:file:/D:/sunmnet/JetBrains/workspace/xxx/target/xxx-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/XXX.cfg但在運行過程中,spring是不允許直接訪問jar包內的文件的,所以會報錯。

解決:

採用讀取流的方式訪問文件:

	ClassPathResource resource = new ClassPathResource("application-validation.xml");
	InputStream inputStream = resource.getInputStream();
	Document document = reader.read(inputStream);
	Element root = document.getRootElement();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章