在Spring启动胖罐里面读取文件

问题描述 投票:1回答:3

我们有一个spring boot应用程序,它有一个我们使用的遗留jar api,需要通过使用InputFileStream来加载属性。我们将传统jar包装在spring boot fat jar中,属性文件位于BOOT-INF / classes文件夹下。我可以看到spring加载了所有相关的属性,但是当我将属性文件名传递给传统jar时,它无法读取属性文件,因为它在jar中并且不在物理路径下。在这种情况下,我们如何将属性文件传递给传统jar?

请注意我们无法更改传统jar。

java spring spring-boot jar
3个回答
0
投票

基本上,你不能,因为属性“文件”不是一个文件,它是一个jar文件中的资源,它被压缩(它实际上是一个.zip文件)。

AFAIK,实现这项工作的唯一方法是从jar中提取文件,并将其放在服务器上一个众所周知的位置。然后在运行时使用FileInputStream打开该文件并将其传递给legacy方法。


1
投票

实际上你可以使用FileSystem。您只需要在获取文件所需的文件夹上模拟文件系统。例如,如果你想获得file.propertiessrc/main/resources,你可以这样做:

FileSystem fs = FileSystems.newFileSystem(this.getClass().getResource("").toURI(), Collections.emptyMap());
String pathToMyFile = fs.getPath("file.properties").toString();
yourLegacyClassThatNeedsAndAbsoluteFilePath.execute(pathToMyFile)

0
投票

我想从资源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();
        }
© www.soinside.com 2019 - 2024. All rights reserved.