首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring boot fat jar无法从application.properties中定义的绝对路径读取文件

Spring Boot是一个用于构建独立的、生产级的Spring应用程序的框架。它提供了一种简化的方式来配置和部署应用程序,并且具有自动化配置的特性。

在Spring Boot中,可以使用application.properties或application.yml文件来配置应用程序的属性。然而,当使用Spring Boot的fat jar部署方式时,可能会遇到无法从application.properties中定义的绝对路径读取文件的问题。

这是因为在fat jar部署方式中,应用程序的所有依赖库和资源文件都被打包到一个单独的可执行jar文件中。因此,相对于应用程序的根目录,绝对路径可能会发生变化。

为了解决这个问题,可以使用Spring Boot提供的ResourceLoader来加载文件。ResourceLoader是一个用于加载资源文件的接口,它可以根据不同的部署环境选择合适的加载方式。

以下是一个示例代码,演示如何使用ResourceLoader加载文件:

代码语言:txt
复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;

@Component
public class FileLoader {

    @Autowired
    private ResourceLoader resourceLoader;

    public String loadFile(String filePath) throws IOException {
        Resource resource = resourceLoader.getResource(filePath);
        InputStream inputStream = resource.getInputStream();
        // 读取文件内容
        // ...
    }
}

在上面的代码中,通过@Autowired注解将ResourceLoader注入到FileLoader组件中。然后,可以使用ResourceLoader的getResource方法来获取文件的Resource对象,进而获取文件的输入流并读取文件内容。

对于应用程序中的其他组件,可以通过依赖注入的方式使用FileLoader来加载文件。

关于Spring Boot的fat jar部署方式以及ResourceLoader的更多信息,可以参考腾讯云的Spring Boot部署文档和ResourceLoader文档:

希望以上信息能够帮助你解决Spring Boot fat jar无法从application.properties中定义的绝对路径读取文件的问题。如果还有其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Apollo(阿波罗)配置中心Java客户端使用指南使用指南

application.properties Apollo 1.0.0+支持通过Spring Bootapplication.properties文件配置,如 app.id=YOUR-APP-ID..., "http://config-service-url"); 通过Spring Boot配置文件 可以在Spring Bootapplication.properties或bootstrap.properties...比如自己写一个xx-company-apollo-client,该jar包依赖apollo-client,在该jar通过spi方式定义定义MetaServerProvider实现,然后应用直接依赖..."); 通过Spring Boot配置文件 可以在Spring Bootapplication.properties或bootstrap.properties中指定apollo.cacheDir=...在本地开发模式下,Apollo只会本地文件读取配置信息,不会Apollo服务器读取配置。 可以通过下面的步骤开启Apollo本地开发模式。

11.2K20

Spring-boot特性(2) 原

此外,我们可以继续保留默认 application.properties 文件,通过 java -jar app.jar --name="Spring" 命令方式来指定 name 参数,由于优先级问题...如果你不想使用application.properties格式命名配置文件,那么可以通过环境变量spring.config.name来设置文件名称,例如: $ java -jar myproject.jar...logging.file logging.path 说明 none none 仅仅输出到Console my.log/log/my.log none 当前位置或绝对路径输出某个日志文件。...日志级别控制 所有的支持日志系统库都支持环境变量读取相关日志级别,所以我们可以将日志级别的描述也记录在环境变量(例如application.properties文件)。...2个规则即可,但是如果有更特殊邀请,可以Spring Boot日志配置开始了解。

97320

SpringBoot配置文件分离

目的:将配置文件分离,其他位置存放好配置文件后,在启动jar时指定配置文件,实现灵活切换 1.默认配置文件 1.1 application.properties SpringBoot程序默认application.properties...中指定使用哪一个文件 spring.profiles.active = dev 启动时,会自动根据填写参数值,读取对应配置文件进行加载. 2.如果图里application.properties文件和日志文件也想外置.../config/log4j2.xml 2.自定义配置文件 2.1 启动时指定 多个配置文件用英文逗号分隔 # 需要在classpath目录 java -jar xxx.jar --spring.config.location...=classpath:/自定义配置文件1.properties,classpath:/自定义配置文件2.properties # 绝对路径指定 java -jar xxx.jar --Dspring.config.location...=绝对路径\自定义配置文件3.properties 2.2 代码中指定 2.2.1 在application.properties文件中指定一个文件路径 eg:路径配置如下,当前项目config下path.properties

2.8K10

Spring Boot -- 如何获取已加载JAR文件

" } 打包成fat jar fat jarSpring Boot引入一种新格式,其打包后结构与war包比较类似,但是可以直接执行并不需要先解压再加载,打包后类似目录如下: BOOT-INF/classes...对于jar in jar因为并不是规范文件路径,因此无法使用File直接读取,那么该怎么读呢?要解决这个问题需要先了解Spring Boot是怎么做....利用Handler读取jar Spring Boot启动原理关键点是实现了jar in jar协议处理器org.springframework.boot.loader.jar.Handler,读取主要功能为...Handler实现openConnection方法,因此当在项目代码想要读取jar in jar格式架包,则可以用该Handler进行资源读取。...文章标题: Spring Boot -- 如何获取已加载JAR文件流 文章链接: https://mrdear.cn/2019/03/19/framework/spring/在jar获取jar文件

5.4K10

SpringBoot系列-- jar可执行原理

spring-boot-maven-plugin SpringBoot 可执行jar包又称fat jar ,是包含所有第三方依赖 jar 包,jar嵌入了除 java 虚拟机以外所有依赖,是一个...普通插件maven-jar-plugin生成包和spring-boot-maven-plugin生成包之间直接区别,是fat jar主要增加了两部分,第一部分是lib目录,存放是Maven依赖...jar文件,第二部分是spring boot loader相关类。...其二,如果在这个机制下,由于fat jar依赖各个第三方jar文件,并不在程序自己classpath下,也就是说,如果我们采用双亲委派机制的话,根本获取不到我们所依赖jar包,因此我们需要修改双亲委派机制查找...我们需要搞懂是关键代码,以及涉及到知识点。 我Maven定义插件开始进行追踪,巩固了对Maven知识点,在这个过程甚至了解到JDK对jar读取是有提供对应工具类。

90510

一起来学 SpringBoot 2.x | 第三篇:SpringBoot 日志配置

app.jar --debug=true , 这种命令会被 SpringBoot 解析,且优先级最高 资源文件配置: application.properties 配置 debug=true 即可。...logging.file: 将日志写入到指定 文件 ,默认为相对路径,可以设置成绝对路径 logging.path: 将名为 spring.log 写入到指定 文件,如(/var/log)...如果想在logback-spring.xml回读 application.properties 配置值时,这是一个非常好解决方案 <!...-- 读取 spring.application.name 属性来生成日志文件名 scope:作用域 name:在 logback-spring.xml 使用键 source:...application.properties 文件键 defaultValue:默认值 --> <springProperty scope="context" name="logName"

1.2K10

Springboot实践

简介(what) Spring 3.x开始,Spring社区发展方向就是弱化xml配置文件而加大注解戏份,Spring Boot使用@Configuration、@ComponentScan等注解...优点(Why) 集中式配置(application.properties)+注解,简化开发; 内嵌Tomcat和Jetty容器,可直接打成jar包启动,无需提供Java war包以及繁琐Web配置...,健康诊断,权限控制; 无冗余代码生成和XML强制配置; 提供支持强大Restfult风格编码,非常简洁; fat jarjar in jar):生成包含所有依赖jar独立可运行JAR...@EnableAutoConfiguration注解会使spring boot自动配置应用(约定胜于配置),这个自动配置是基于依赖jar,例如当你在添加spring-boot-starter-web依赖后...文件配置指令填充它属性。

56830

Spring Boot 配置文件花样,看这一篇足矣!

在快速入门一节,我们轻松实现了一个简单RESTful API应用,体验了一下Spring Boot给我们带来诸多优点,我们用非常少代码量就成功实现了一个Web应用,这是传统Spring应用无法办到...自定义参数 我们除了可以在Spring Boot配置文件设置各个Starter模块定义配置属性,也可以在配置文件定义一些我们需要定义属性。...包之内,针对不同{profile}环境配置文件内容,例如:application-{profile}.properties或是YAML定义配置文件 位于当前应用jar包之外application.properties...和YAML配置内容 位于当前应用jar包之内application.properties和YAML配置内容 在@Configuration注解修改,通过@PropertySource注解定义属性...可以看到,其中第7项和第9项都是应用jar包之外读取配置文件,所以,实现外部化配置原理就是从此切入,为其指定外部配置文件加载位置来取代jar包之内配置内容。

83600

使用Spring Boot创建docker image

最最通用办法就是将Spring boot应用程序打包成一个fat jar,然后写一个docker file,将这个fat jar制作成为一个docker image然后运行。...Spring bootfat jar分为三个部分,第一部分就是BOOT-INF, 里面的class目录放是我们自己编写class文件。而lib目录存放是项目依赖其他jar包。...第三部分是Spring Boot类加载器,fat jar启动是通过Spring BootjarLauncher来创建LaunchedURLClassLoader,通过它来加载lib下面的jar包...– SNAPSHOT依赖jarspring-boot-loader – Spring bootclass loader文件 application – 应用程序class和resources...文件 注意,这里index文件是有顺序,它和我们将要添加到docker imagelayer顺序是一致

1.5K21

Spring Boot 2.3.0正式发布:优雅停机、配置文件位置通配符新特性一览

正文 Spring Boot v2.2依然是活跃维护版本,Spring Boot遵循是Pivotal OSS支持策略,发布日期起支持主要版本3年。...官方说明:完成迁移后,请确保项目的依赖项删除properties-migrator这个模块。...、spring.codec. ---- 删除不推荐使用类/方法/属性 在该版本Spring Boot删除了2.2版本不推荐使用大多数类,方法和属性。请确保升级之前没有再调用不推荐使用方法。...---- Docker支持 在Maven和Gradle插件添加了对构建包含分层内容jar文件支持。分层根据jar内容更改频率来分隔它们。这种分离允许更有效地构建Docker映像。...---- Fat Jar支持优化 用Maven和Gradle构建Fat jar现在包括一个索引文件。当jar被分解时,这个索引文件用于确保类路径顺序与直接执行jar时相同。

1.4K20

Spring Boot 静态资源处理

本文还是主要针对Spring Boot默认处理方式,部分配置在application 配置文件(.properties 或 .yml) 默认资源映射 我们在启动应用时候,可以在控制台中看到如下信息...如果我按如下结构存放相同名称图片,那么Spring Boot 读取图片优先级是怎样呢?...上面我们介绍了Spring Boot 默认资源映射,一般够用了,那我们如何自定义目录?...这些资源都是打包在jar,然后实际应用,我们还有很多资源是在管理系统动态维护,并不可能在程序包,对于这种随意指定目录资源,如何访问?.../**").addResourceLocations("file:H:/myimgs/"); 通过配置文件配置 上面是使用代码来定义静态资源映射,其实Spring Boot也为我们提供了可以直接在 application.properties

68020

SpringBoot整合Apollo看这篇文章基本够了

应用身份信息,是服务端获取配置一个重要信息。...第一种:基于Spring形式获取,缺陷是当Apollo文件发生改变,配置文件无法获取到最新,后面有讲到解决方案 第二种:通过Apollo形式获取,这种是直接获取通过Apollo配置key,...填写项目信息 部门:Apollo有默认,我这里就先用默认了,当然Apollo还是支持自定义 AppId: 这里Appid要跟项目的spring.application.name 名称一致,否则无法读取配置...点击提交,就如下图 添加配置 可以看到环境,我这里是有DEV和FAT环境,默认情况下是DEV环境,当然需要发布环境,可以自定义加入 我这里就将配置加入到DEV环境 ?...发布配置 前面新增配置只是持久化apollo数据库,并未真正发布出去,项目中还无法读取到,所以只有到项目真正需要用到该配置,才需发布 ?

1.4K30
领券