解决-Spring boot: 加载jar包外部json配置文件时,报错"File not found"

mac springboot docker build提示 No such file or directory spring-boot docker-maven-plugin 构建docker image 阅读详情

描述

打包时把resource/activity-config.json文件分离到jar包同级目录下config/activity-config.json后,通过@Value("classpath:activity-config.json") private Resource activityConfigRes;方式,获取不到json里面的内容。

解决办法:不用注解,改用System.getProperty("user.dir") + "/config/activity-config.json";这种方式读取配置文件中的内容。

            String filePath = System.getProperty("user.dir")
                    + "/config/activity-config.json";
            InputStream in = new BufferedInputStream(new FileInputStream(filePath));
            String areaData =  IOUtils.toString(in, Charset.forName("UTF-8"));
            ObjectMapper mapper = new ObjectMapper();
            ActivityConfig config = mapper.readValue(areaData, ActivityConfig.class);

如何加载jar包外部json配置文件实现步骤

第一步

在resource目录下创建json配置文件activity-config.json
在这里插入图片描述

第二步

打包时从jar包中分离出配置文件到与jar包同级的文件夹config下。

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <!--跳过测试-->
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <!--指定启动类-->
                            <mainClass>**.**.Application</mainClass>
                        </manifest>
                    </archive>
                    <!--指定classes目录-->
                    <!--<classesDirectory>src/main/java</classesDirectory>-->
                    <outputDirectory>${project.package.directory}/${project.artifactId}</outputDirectory>
                    <!--排除classes目录下不需要打包的文件-->
                    <excludes>
                        <!--<exclude>META-INF/**</exclude>-->
                        <exclude>application.properties</exclude>
                        <exclude>*.json</exclude>  
                        <exclude>logback-spring.xml</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <includeScope>compile</includeScope>
                            <!--复制依赖jar到指令目录-->
                            <outputDirectory>${project.package.directory}/${project.artifactId}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>

            </plugin>
            <!--复制资源文件到指定目录-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.package.directory}/${project.artifactId}/config/</outputDirectory>
                            <resources>
                                <resource>
                                    <!--资源文件的目录-->
                                    <directory>src/main/resources/</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

第三步

读取配置文件内容,转换成对象

        try {
            String filePath = System.getProperty("user.dir")
                    + "/config/activity-config.json";
            InputStream in = new BufferedInputStream(new FileInputStream(filePath));
            String areaData =  IOUtils.toString(in, Charset.forName("UTF-8"));
            logger.info("读取活动配置文件:" + areaData);
            ObjectMapper mapper = new ObjectMapper();
            ActivityConfig config = mapper.readValue(areaData, ActivityConfig.class);
        } catch (Exception e) {
            e.printStackTrace();
        }

如果要用到IOUtils,需要在pom文件中导入下面的配置。

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
【comfyUI】疑难 错误问题 解决方案 管理器-安装缺失节点如果安装不成功手动安装。进入插件目录在红色区域输入CMD手动安装下载。 阅读详情

相关推荐

详解SpringBoot外部化配置

Profile 本质上代表一种用于组织配置信息的维度,在不同场景下可以代表不同的含义。例如,如果 Profile 代表的是一种状态,我们可以使用 open、halfopen、close 等值来分别代表全开、半开和关闭等。再比如系统需要设置一系列的模板,每个模板中保存着一系列配置项。复制代码。

m0_71777195的博客 1691

解决Springboot项目打成jar包后获取resources目录下的文件报错的问题

前几天在项目读取resources目录下的文件时碰到一个小坑,明明在本地是可以正常运行的,但是一发到测试环境就报错了,说找不到文件,报错信息是:class path resource [xxxx] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:xxxx.jar!xxxx。看了半天代码感觉没有问题,于是怀疑是打成项目jar包后和原项目存在差异导致的。

fhey的博客 6675

Java Web入门:Spring Boot 3.x + JDK 17 实战搭建REST API

REST API是现代Java Web开发的核心交付形态,其本质是基于HTTP协议的资源交互接口。理解其工作原理需掌握Spring Boot自动配置机制、内嵌Tomcat生命周期及Maven依赖管理逻辑。技术价值在于消除传统Servlet部署的环境耦合与版本冲突,显著提升开发-调试-部署闭环效率。典型应用场景包括微服务后端、前后端分离接口、内部工具系统等。本教程聚焦2024年企业真实技术栈——Spring Boot 3.2.6与JDK 17,手把手实现从IDEA新建项目到curl验证JSON接口的完整链路,

csdndownload11123的博客 421

【报错记录】SpringBoot中MultipartFile上传报/tmp/tomcat.***.tmp (No such file or directory)

前言 我这个接口的需求大概是用户上传一个Excel文件到后端,后端解析这个Excel,并做一系列很耗时的操作。由于这个接口很耗时,因此做成了异步处理的方式,将处理完成的信息通过消息中心告诉用户,并不是立即接口返回。然而这个接口在我本地调试的时候都是好的,上线后就报错了。报错的内容大概是: /tmp/tomcat.**************.tmp (No such file or directory) 解决过程 很明显是文件找不到,我就去/tmp目录下找,还真的没找到这个文件,我还以为是/tmp目

DCTANT的博客 1万+

VS Code运行Spring Boot实战指南:环境配置、热重载与容器调试

Spring Boot作为主流Java微服务框架,其本地开发依赖完整的构建链路与运行时环境。理解Maven生命周期、JDK版本兼容性、IDE插件协同机制,是保障项目可启动、可调试、可热更的基础前提。VS Code凭借轻量架构和容器原生支持,正成为多语言团队统一开发环境的关键选择;但其Java生态需精准配置Java Extension Pack、Spring Boot Tools与Debugger三大核心扩展,并解决PATH继承、DevTools热重载失效、中文乱码等典型工程问题。本文聚焦真实生产场景下的环境

weixin_34320724的博客 486

IntelliJ IDEA中Spring Boot项目启动与调试全流程详解

在Java企业级开发中,Spring Boot凭借其约定优于配置的理念和自动装配机制,极大地简化了应用的创建和部署流程。其核心原理在于通过内嵌Servlet容器和Starter依赖,实现了开箱即用的快速开发体验。这一技术价值在于显著提升了开发效率,降低了微服务架构的入门门槛,广泛应用于Web服务、API接口和企业级后台系统构建。对于开发者而言,掌握在主流IDE如IntelliJ IDEA中高效启动、配置和调试Spring Boot项目是关键的工程实践技能。本文聚焦于**项目导入**与**热部署**等核心环节

weixin_33912638的博客 374

Spring Boot多模块项目配置加载难题:从原理到实战解决方案

在Java企业级应用开发中,Spring Boot的自动配置机制极大地简化了项目搭建,但多模块项目中的配置加载却可能成为开发者的‘地狱之地’。理解配置加载的原理是关键:Spring Boot遵循特定的优先级顺序,从命令行参数到环境变量,再到类路径中的配置文件。在多模块架构下,模块间的依赖会导致类路径复杂化,不同模块的application.properties或application.yml文件可能相互覆盖,引发配置冲突。这种问题的技术价值在于,它考验开发者对Spring Boot核心机制和项目架构的掌握程

weixin_34267123的博客 397

Spring Boot 启动原理深度解析:从 SpringApplication 到 ApplicationContext

Spring Boot 启动过程并非黑盒,而是由 SpringApplication 驱动的标准化初始化流水线。其核心原理涵盖环境准备、上下文构建与启动收尾三大阶段,依赖 ApplicationContextInitializer、ConditionEvaluationReport 等关键机制实现条件化自动配置。该设计在保障开发效率的同时,也带来 DataSource 配置缺失、Web 类型误判、Bean 扫描越界等典型故障。理解这一原理,是诊断 NoSuchBeanDefinitionException、

weixin_30482383的博客 466

spring 动态读取配置文件内容的注解_拒绝 FileNotFoundException!总结了这几个读取 jar 包外配置文件的知识点...

(给ImportNew加星标,提高Java技能)转自:公众号 侠梦的开发笔记 作者:侠梦mp.weixin.qq.com/s/Dp0vZdRxESNraJlFMnQ4gA前言相信很多人遇到过这个问题:本地运行的好好的程序,怎么部署到线上就报找不到配置呢?初识getResource案例一FieldMapConfig.class.getResource("p1.properties").g...

weixin_39882623的博客 106

Java农产品质量溯源大数据管理系统源码

产品追溯基于“一物一码”从工厂生产环节至销售阶段,赋予产品唯一的数码,并关联产品名称、批号、生产时间等信息,建立包装关联关系,为后期产品的追溯、营销搭建信息基础。 农产品溯源,从原材料收购、生产、加工质检到包装运输、终端门店销售等环节追溯,可以保证产品质量,监管部门和消费者都可以查询产品信息。对生产进行层层把关、一旦发现问题、立即进行处理、提升产品质量。

xingchen优快云的博客 1806

UVM概述及uvm_component和uvm_object(一)

UVM:Universal Verification Methodology(通用验证方法学) UVM:是建立在systemverilog平台上的一个库,提供了一系列的接口,让我们能够更方便的进行验证。验证平台组成: Driver:用来把不同的激励施加给DUT; Monitor:用来检测DUT的输出; Scoreboard:专门用来比较期望值与monitor检测到的DUT输出; Refer

南国之邱 1万+

Java程序“找不到主类”错误全解析:从MANIFEST.MF到打包部署

在Java开发中,类路径(Classpath)和JAR包结构是程序从源码到运行的核心基础。其原理在于JVM通过类加载器根据指定的路径寻找并加载.class文件。理解这一机制的技术价值在于,它能确保应用在不同环境下可靠启动,是解决部署问题的关键。尤其在微服务和持续集成场景中,正确的打包方式直接影响交付物的可移植性。当遇到“错误:找不到或无法加载主类”时,问题往往源于可执行JAR包的MANIFEST.MF文件配置错误或依赖缺失。本文聚焦于Spring Boot打包和JAR包结构分析,通过剖析MANIFEST.M

weixin_34198453的博客 480

【OpenCV】复杂场景下的高精度圆检测实战(附完整代码)

本文针对OpenCV霍夫圆检测在复杂场景下易失效的问题,提出了一套基于轮廓分析的高精度圆检测实战方案。通过图像预处理、轮廓发现及多轮几何筛选(面积、周长、椭圆拟合、多边形逼近),有效排除噪声和类圆干扰物,显著提升复杂场景下的检测鲁棒性,并附完整可调参的Python代码实现。

weixin_29095587的博客 201

Spring Boot项目Jackson依赖冲突排查与解决全攻略

在Java后端开发中,依赖管理是构建稳定项目的基石,尤其在使用Maven或Gradle等构建工具时。其核心原理在于通过坐标(groupId、artifactId、version)和依赖传递机制自动解析并管理第三方库。良好的依赖管理技术价值在于确保项目构建的可重复性、避免类路径冲突以及保障运行时环境的稳定性。常见的应用场景包括Web开发、微服务架构以及各类中间件集成。当项目引入像Jackson这样被广泛使用的JSON处理库时,极易因**依赖冲突**或**版本不匹配**导致运行时抛出`ClassNotFound

weixin_30613433的博客 442

【AI实战派】从零部署YOLOv8:香橙派AIpro边缘端目标检测全流程解析

本文详细解析了在香橙派AIpro边缘设备上从零部署YOLOv8目标检测模型的全流程。内容涵盖硬件开箱、环境搭建、模型转换(ONNX到昇腾OM格式)以及编写Python推理脚本,并提供了性能优化与实战技巧,帮助开发者高效实现实时边缘AI应用。

weixin_29183637的博客 330

android技术--------如何解决弹出键盘只影响当前fragment输入的窗口

题目比较长,也可能有很多人不明所以这东西有啥可写的,简单来说就是实现近似于Android Pad 上QQHD聊天的界面效果,搞了很长的事件,今天终于搞定。 android3.0新加了组件Fragment称之为碎片,对这个一无所知的请自觉补习。今天的阐述将基于此组件。 fragment可以放入activity中,并随activity的生命周期变化而变化,但当相应键盘事件的时候,就比较让人挠头了,

3507

Spring Boot CLI 入门:用 Groovy 快速启动 Spring 应用

Spring Boot CLI 是 Spring 官方提供的命令行开发工具,基于 Groovy 脚本实现零配置快速启动,其核心原理是利用 Groovy 的 AST 变换能力与依赖自动推导机制,在编译期动态注入 Spring 启动逻辑并解析 import 语句以加载对应 Starter。该工具显著提升原型验证、CI/CD 脚本及临时服务的开发效率,技术价值在于将传统 Maven 项目初始化(5 分钟)压缩至秒级运行,适用于微服务 PoC、运维自动化和架构演示等轻量高频场景。本文聚焦 Spring Boot C

weixin_34290096的博客 367

大疆OcuSync系统背后的黑科技:跳频扩频技术如何让你的无人机飞得更稳

本文深入解析了大疆OcuSync系统如何运用跳频扩频技术等先进无线通信方案,显著提升无人机在复杂环境下的飞行稳定性。系统通过跳频扩频与直接序列扩频技术协同工作,结合双频智能切换与多天线MIMO,有效对抗信号干扰与多径效应,确保控制指令与高清图传的可靠、低延迟传输,为用户带来更安心、更流畅的飞行体验。

ol7890123的博客 630

Spring Boot快速入门:核心特性、实战开发与部署指南

在Java企业级应用开发领域,框架的演进始终围绕提升开发效率和降低配置复杂度展开。Spring Boot作为Spring框架的增强版启动器,其核心设计哲学是“约定大于配置”,通过自动配置机制和起步依赖,显著简化了传统Spring项目繁琐的XML配置过程。这一技术价值在于,它让开发者能更专注于业务逻辑的实现,而非基础设施的搭建,从而大幅提升工程实践效率。其应用场景广泛覆盖Web应用、微服务及数据访问等。本文聚焦Spring Boot的快速入门,深入解析其起步依赖、自动配置与Actuator这“三板斧”,并结合

weixin_30607029的博客 413

stm32学习笔记:ADC

stm32学习笔记:ADC

hmh520i的博客 3224

CasADi - 最优控制开源 Python/MATLAB 库

CasADi 是一款开源软件工具,用于数值优化,特别是最优控制(即涉及微分方程的优化)。该项目由 Joel Andersson 和 Joris Gillis 在鲁汶工程大学工程优化中心 (OPTEC) 在读博士生在 Moritz Diehl 的指导下发起。本文档旨在简要介绍 CasADi。

机器人控制与仿真应用 7935

Electron打包Spring Boot+Vue项目:跨平台桌面应用一站式解决方案

在桌面应用开发领域,跨平台与开发效率是核心诉求。Electron框架基于Chromium和Node.js,允许开发者使用Web技术栈构建原生体验的桌面应用,其原理是将前端页面渲染与后端Node.js能力结合,通过进程间通信实现系统级功能调用。这一技术价值在于极大降低了桌面应用开发门槛,使Web开发者能快速构建Windows、macOS、Linux多端应用,广泛应用于企业工具、编辑器、即时通讯等场景。本文聚焦于将Spring Boot后端与Vue前端整合进Electron的技术实践,通过进程管理、资源打包等关

weixin_33713503的博客 470

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring Boot项目读取resources文件的九种场景与避坑指南

本文详细介绍了Spring Boot项目中读取resources文件的九种场景与避坑指南,涵盖ClassLoader.getResourceAsStream、ClassPathResource等核心方法,解决开发与生产环境差异导致的文件路径问题,帮助开发者高效管理静态资源与配置文件。

weixin_33766168的博客 452

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Spring Boot核心原理与实战:5分钟理解约定大于配置的Java开发框架

在Java企业级应用开发领域,框架的核心价值在于提升开发效率和降低复杂度。Spring Boot作为Spring生态中的一站式解决方案,其设计哲学“约定大于配置”深刻体现了这一理念。通过自动依赖管理和条件化配置,Spring Boot能够根据项目引入的Starter依赖自动推断并装配所需的组件,如内嵌服务器、数据源等,从而避免了传统Spring应用中繁琐的XML配置和版本兼容性问题。这一机制不仅简化了项目的初始搭建,还统一了团队的技术栈和配置风格。在实际工程实践中,开发者可以通过application.ym

436

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spring Boot项目创建全流程详解:从环境配置到部署的避坑指南

Spring Boot作为Java后端开发的主流框架,其核心价值在于通过自动配置和起步依赖,简化了传统Spring应用的初始搭建和开发过程。其原理是基于约定大于配置的思想,通过内嵌Web容器和Starter依赖,实现了项目的快速启动和开箱即用。这项技术极大地提升了开发效率,降低了微服务架构的入门门槛,广泛应用于企业级应用、RESTful API服务和云原生开发等场景。本文聚焦于Spring Boot项目的创建,深入剖析了从JDK版本选择、IDE插件配置到Maven依赖管理的每一个关键步骤,并针对Lombok

weixin_33695450的博客 321

Spring Boot + JPA + MySQL 构建物资管理系统后端实战

在Java企业级应用开发中,对象关系映射(ORM)技术是连接业务逻辑与关系型数据库的关键桥梁。其核心原理是通过框架自动将Java对象映射到数据库表,从而屏蔽底层SQL差异,让开发者能以面向对象的方式操作数据。Spring Data JPA作为基于JPA规范的ORM框架,通过定义Repository接口和注解,极大地简化了数据持久层代码的编写,提升了开发效率并降低了出错率。结合Spring Boot的自动配置和快速启动能力,以及MySQL数据库的事务支持与稳定性,这套技术栈在管理信息系统、电商平台、库存管理等

www.itmmd.com 392
上一篇: React-从0到1搭建一个React项目(一)
下一篇: LocalStorage扩容
Huang-Lin
博客等级 码龄10年 20粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值