我们有一个spring boot应用程序,它有一个我们使用的遗留jar api,需要通过使用InputFileStream来加载属性。我们将传统jar包装在spring boot fat jar中,属性文件位于BOOT-INF / classes文件夹下。我可以看到spring加载了所有相关的属性,但是当我将属性文件名传递给传统jar时,它无法读取属性文件,因为它在jar中并且不在物理路径下。在这种情况下,我们如何将属性文件传递给传统jar?
请注意我们无法更改传统jar。
基本上,你不能,因为属性“文件”不是一个文件,它是一个jar文件中的资源,它被压缩(它实际上是一个.zip文件)。
AFAIK,实现这项工作的唯一方法是从jar中提取文件,并将其放在服务器上一个众所周知的位置。然后在运行时使用FileInputStream打开该文件并将其传递给legacy方法。
实际上你可以使用FileSystem。您只需要在获取文件所需的文件夹上模拟文件系统。例如,如果你想获得file.properties
,src/main/resources
,你可以这样做:
FileSystem fs = FileSystems.newFileSystem(this.getClass().getResource("").toURI(), Collections.emptyMap());
String pathToMyFile = fs.getPath("file.properties").toString();
yourLegacyClassThatNeedsAndAbsoluteFilePath.execute(pathToMyFile)
我想从资源folder.src / main / resources中读取一个JSON文件因此编写了如下代码。
春季启动阅读弹簧启动资源不适用于胖罐。花了很多时间在这个简单的事情后,我发现在下面工作。
我发现了一个detailed link on reading resources in Spring Boot,如果是胖罐子的话。
@Value("classpath:test.json")
Resource resourceFile;
try {
InputStream resourcee =resource.getInputStream();
String text = null;
try (final Reader reader = new InputStreamReader(resourcee)) {
text = CharStreams.toString(reader);
}
System.out.println(text);
} catch (IOException e) {
e.printStackTrace();
}