Springboot读取外部配置文件,项目部署时配置读取不到问题

这篇具有很好参考价值的文章主要介绍了Springboot读取外部配置文件,项目部署时配置读取不到问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:

最近项目部署,但是每个地方都有个别地方配置的差异,我们每次打包后再进行修改极度不方便,这里将有关的配置都抽取出来,放在jar包外进行配置,这样以后更新时只需要将jar包更换然后重启即可,配置读取外部的固定配置文件。

SpringBoot 配置

springboot默认配置的加载位置和优先级顺序
springboot启动时会扫描以下位置的application.properties和application.yml文件作为默认的配置文件。

  • file: ./config/
  • file: ./
  • classpath: /config/
  • classpath: /
    所有的配置文件都会被加载,但高优先级的配置会覆盖低优先的配置,上面的优先级为由高到低排列,./config/ 的优先级最高,我们创建项目时默认的放在resources目录下的优先级是最低的。 classpath可以理解为我们项目内部的没打包时的resources文件夹下的,file理解为和jar包同级的目录(如果在linux中启动项目时写的启动路径的相对位置和file的文件不是同级时外部配置文件会出现读取失败,可以翻到文章最下面)。

配置文件中带spring.profile的文件会优先被加载

启动项目时指定配置文件的位置

java -jar xxxx.jar -Dspring.config.location=/home/test/application.yml

启动时加载/home/test文件夹下的application.yml作为配置文件。这里还可以指定端口、生效的配置文件、日志打印等

java -jar xxxx.jar -Dspring.profiles.active=prod -Dspring.config.location=/home/test/application.yml
-Dserver.port=8081  > logs/xxxlog.log 2>&1 &

application配置
非默认配置文件,这里我是config.properties

可以通过注解_@PropertySource_ 来指定配置文件的位置,value中提供两种方式 classpath 和 file

@Configuration
@ConfigurationProperties(prefix = "config", ignoreUnknownFields = false)
@PropertySource(name = "config.properties"
        ,value = {"classpath:/config.properties","file:./config/config.properties"}
        ,ignoreResourceNotFound = true
        ,encoding = "UTF-8")

value是一个数组,可以放多个配置文件,从左到右进行加载,后面的会覆盖掉前面的配置,ignoreResourceNotFound = true主要用来忽略文件不存在的情况,如果第一个目录下没有找到对应的文件内容,就向后继续找不加这个配置第一个文件找不到时会报错。ConfigurationProperties 是用来减少下面@Value注解的参数,如果不加这个注解,配置项中配置的是 config.username = 'liuch’
这时你的@Value(“ c o n f i g . m a i n t T y p e " ) 需要写完整,如果配置了以后 @ V a l u e ( " {config.maintType}")需要写完整,如果配置了以后@Value(" config.maintType")需要写完整,如果配置了以后@Value("{maintType}”)即可。
部署时配置读取失败

注意: 在linux启动项目时,config文件夹要和启动根目录的相对路径是同一级,否则读取不到配置,需要在启动项目时指定配置文件位置。

例: 现在jar和config放在 /home/liuch/app/ 文件夹下,我们启动时需要先进入到 /home/liuch/app 目录,然后再
nohup java -jar xxx.jar >/dev/null 2>&1 &,直接使用命令nohup java -jar /home/liuch/app/xxx.jar >/dev/null 2>&1 & 启动时不会去读取config文件夹下的配置文件,需要使用-Dspring.config.location= 指定配置文件位置,此时我们的非默认配置文件是读取不到的,我们可以在application.yml文件中配置需要加载的非默认配置文件位置,

server:
  port: 8088
config:
  path: /home/liuch/config.properties
@PropertySource(value = {"file:${config.path}"}, encoding="utf-8")

下面的@Value的用法和之前一样。

附:springboot项目启动时的参数

/usr/local/java/jdk1.8.0_131/bin/java -jar -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/spb_zcmweb/8103/dump/heap/
 -Djava.io.tmpdir=/data/liuch/tmp/ 
 -Dserver.port=8103 
 -Dcom.sun.management.jmxremote
 -Dcom.sun.management.jmxremote.port=5103 
 -Dcom.sun.management.jmxremote.rmi.port=6103 
 -Dcom.sun.management.jmxremote.authenticate=false 
 -Dcom.sun.management.jmxremote.ssl=false 
 -Dcom.sun.management.jmxremote.access.file=/usr/local/java/jdk1.8.0_131/jre/lib/management/jmxremote.access 
 -Xmx2G -Xms2G -XX:+DisableExplicitGC -verbose:gc -Xloggc:/data/liuch/log/gc.%t.log -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCTaskTimeStamps -XX:+PrintGCDetails -XX:+PrintGCDateStamps 
 -Dserver.connection-timeout=60000 
 -Dserver.tomcat.accept-count=1000 
 -Dserver.tomcat.max-threads=300 
 -Dserver.tomcat.min-spare-threads=65 
 -Dserver.tomcat.accesslog.enabled=false 
 -Dserver.tomcat.accesslog.directory=/data/liuch/log/ 
 -Dserver.tomcat.accesslog.prefix=access_log 
 -Dserver.tomcat.accesslog.pattern=combine 
 -Dserver.tomcat.accesslog.suffix=.log 
 -Dserver.tomcat.accesslog.rotate=true 
 -Dserver.tomcat.accesslog.rename-on-rotate=true 
 -Dserver.tomcat.accesslog.request-attributes-enabled=true 
 -Dserver.tomcat.accesslog.buffered=true 
 -XX:NewRatio=4 -XX:SurvivorRatio=30 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=8 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:ParallelGCThreads=24 -XX:ConcGCThreads=24 -XX:-UseGCOverheadLimit -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=1 -XX:+CMSParallelRemarkEnabled -XX:+CMSScavengeBeforeRemark -XX:+ParallelRefProcEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=6000 -XX:CompileThreshold=10 -XX:MaxInlineSize=1024 -Dsun.net.client.defaultConnectTimeout=60000 
 -Dsun.net.client.defaultReadTimeout=60000 
 -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300 
 -Djsse.enableCBCProtection=false 
 -Djava.security.egd=file:/dev/./urandom 
 -Dfile.encoding=UTF-8 
 -Dlog.path=/data/liuch/log/ 
 -Dspring.profiles.active=online  
 /data/liuch/deploy/xxxx.jar zcmweb 

原文链接:https://blog.csdn.net/chang100111/article/details/122191892文章来源地址https://www.toymoban.com/news/detail-472256.html

到了这里,关于Springboot读取外部配置文件,项目部署时配置读取不到问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot配置外部Tomcat项目启动流程源码分析

    SpringBoot应用默认以Jar包方式并且使用内置Servlet容器(默认Tomcat),该种方式虽然简单但是默认不支持JSP并且优化容器比较复杂。故而我们可以使用习惯的外置Tomcat方式并将项目打War包。 ① 同样使用Spring Initializer方式创建项目 ② 打包方式选择\\\"war\\\" ③ 选择添加的模块 ④ 创建的

    2024年02月04日
    浏览(29)
  • 10SpringBoot 静态资源访问 11Springboot的默认配置文件和外部配置文件及加载顺序

            做web开发的时候,我们往往会有很多静态资源,如html、图片、css等。那如何向前端返回静态资源呢?        以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要把静态资源放在该目录下就可以直接访问。        但是,基

    2023年04月08日
    浏览(45)
  • SpringBoot 读取项目中静态资源文件

    PathMatchingResourcePatternResolver是一个 Ant模式通配符 的Resource查找器,可以用来查找类路径下或者文件系统中的资源。 ❗❗❗在SpringBoot中尽量 避免使用 ResourceUtils读取资源文件。 ResourceUtils.getFile() 获取的是资源文件的绝对路径,当项目打包为jar或者war包之后部署,资源文件的绝对

    2024年02月07日
    浏览(39)
  • Springboot读取配置文件

    springboot项目中不同配置文件的优先加载顺序 为:properties yml yaml自定义核心类配置 自定义配置文件的加载 一般系统会加载默认的application.properties或者application.yml,但如果使用自定义配置文件,可使用下面方式进行加载: @PropertySource(\\\"classpath:myApplication.properties\\\")加载自定义配置

    2024年01月17日
    浏览(23)
  • SpringBoot访问静态资源和jar外部静态资源,部署前端打包后的vue项目放入静态资源里

    记录一下使用SpringBoot访问静态资源和SpringBoot打包之后的jar外部静态资源,在开发的时候,一般选择前后端分离的方式,前端使用vue 后端使用SpringBoot,通常情况下,部署都是前端通过http去请求后端资源,涉及到http请求,那么肯定需要资源的目标地址IP,一般云端部署给到I

    2024年02月09日
    浏览(60)
  • SpringBoot项目打成jar包之后无法读取资源文件【jar包文件的读取方式】

    将文件放在resources目录下,确保资源文件被打包到jar包中 如何判断资源是否在jar包中,只需要解压jar包,然后查询资源名称即可 读取文件的时候写成绝对路径,肯定是不行的,这个很容易理解。 那读取文件的时候写相对路径是否可以呢?答案也是不行,见下面解释。 这是原

    2024年02月14日
    浏览(39)
  • SpringBoot配置文件的注入和读取

    目录 1. 配置文件的作用 2. 两种配置文件的格式: 2.1 properties 基本语法: 2.1.1 写入 2.1.2 读取 执行原理 2.1.3 缺点分析 2.2 yml 基本语法: 2.2.1 写入(非对象) 2.2.3 配置对象 2.2.4 配置集合 多个配置文件         SpringBoot 是为了简化 Spring 的操作,提高 Spring 项目的开发效率,它

    2024年02月07日
    浏览(56)
  • 芋道SpringBoot配置Maven、创建SpringBoot项目、创建Web接口、读取配置信息

    🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 第一章 芋道 Spring Boot 快速入门 芋道 SpringBoot是一款国产的SpringCloud微服务框架,包括Outh2.0、微服务网关、微服务注册中

    2024年04月23日
    浏览(26)
  • springboot读取多文件配置(包括nacos)

    首先来简单了解一下这个类。 ResourceBundle类主要是用来 解决国际化和本地化问题 ,就我的理解,就是类似于前端界面的字体显示,国际化操作一般都要支持多国语言,那么这个ResourceBundle类就能够简单快速的解决这个问题。 同时,这个类只能支持读取properties属性文件,和

    2023年04月09日
    浏览(33)
  • SpringBoot读取配置文件中的内容

    配置文件application.yml: Environment 是 springboot 核心的环境配置接口,它提供了简单的方法来访问应用程序属性,包括系统属性、操作系统环境变量、命令行参数、和应用程序配置文件中定义的属性等等。 Springboot 程序启动加载流程里,会执行SpringApplication.run中的prepareEnvironmen

    2024年01月21日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包