现在的项目越来越多的都是打包成jar运行尤其是springboot项目,这时候配置文件如果一直放在项目中,每次进行简单的修改时总会有些不方便,这里我们看下打包成jar之后,从外部配置文件中读取配置信息。

首先想到的是通过java代码读取外边某个路径下的文件,但是开始做之后发现好多问题。后来又找其它解决方案,正好搜到一种简单的解决方式:

java -jar demo.jar --Dspring.config.location=myapplication.properties

这样就可以通过@value注解读取myapplication.properties中的配置信息了。(上边的大写D好像可以不写的)

后来想着直接把spring.config.location写到application.properties配置文件中,然后指定一个固定的外部配置文件来获取信息,这样启动的时候就可以不用加最后一行了。

spring.config.location=C:\\Users\\Administrator\\git\\Display\\host.properties

可是这种方式是行不通的,比如我配置文件中有下面信息:

myname=hellopangkunkun

代码:

myname=hellopangkunkun

我在启动的时候直接报这个地方的错误,说是无法找到myname,导致整个项目出异常。

后来搜了下文章,对比官网文档,又得到了一些信息:

24.3 Application property files

SpringApplication will load properties from application.properties files in the following locations and add them to the Spring Environment:

A /config subdirectory of the current directory.

The current directory

A classpath /config package

The classpath root

The list is ordered by precedence (properties defined in locations higher in the list override those defined in lower locations).

这里说了四种方式可以把配置文件放到外部的。

第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下;

第二种是直接把配置文件放到jar包的同级目录;

第三种在classpath下建一个config文件夹,然后把配置文件放进去;

第四种是在classpath下直接放配置文件。

这四种方式的优先级是从一到四一次降低的。

注: 一二两种方案其实不是jar包的同级目录,而是(执行启动指令的)同级目录。为了便于理解我把上面的当前目录说成jar包的同级目录,这种说法并不对。如果是刚开始接触或者调试这块,还是在jar包同级目录方便。

由于我们是要从外部读取文件,所以直接说前两种。

看下文件目录结构:

这里的application.properties是我们的配置文件,config是创建的另外一个目录,放的也是application.properties。

Display-1.0-SNAPSHOT.jar中可以包含application.properties配置文件也可以不包含。

为了验证可以在config中设置myname=name1,jar同级目录中设置myname=name2,如果jar中包含配置文件,将其中设置成myname=name3。

直接使用指令启动:

java -jar Display-1.0-SNAPSHOT.jar

之后验证可得知,我们通过@Value(“${myname}”)获取到的myname的值是name1,把config下的配置文件删除后获取的结果是name2,都删除后才会获取jar包中配置文件的数据name3。

另外如果我们想要想配置测试、开发、生产环境一样使用另外一个配置文件怎么来实现呢?

下面继续,我把application.properties的信息修改如下:

spring.profiles.active=dev,host

配置文件目录结构:

我又新增了一个名为application-host.properties的配置文件,同理也可以把这个文件考出来放到jar包外面,同级目录或者config下。

这样项目启动之后dev配置文件和host配置文件都会生效。

这里为了突出其他的配置文件我只把host的拷出来了,dev的还是在jar包里,application.properties配置文件放在jar中也一样,我们需要的主要是host的配置文件。

这样每次修改的时候只需要修改配置文件信息,然后重启项目就好,不需要重新打包。

如果想要只修改配置文件,不重启项目就能生效,可以考虑用java来读取配置文件中的数据,把它当作一个普通文件来读取,或者写到其他数据库中也行。上面这些方案已经能够满足我的需求了,所以其他的不在做了。

最后提个问题,也是我没弄明白的,希望知道的各位能够给个答案:

我把spring.config.location这个配置写到配置文件中为什么没有生效?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

springboot加载外部xml_Springboot引用外部配置文件的方法步骤相关推荐

  1. 服务器jar包配置文件,spring boot加载第三方jar包的配置文件的方法

    前言 今天收到一封邮件,大概内容如下:spring boot鼓励去配置化,那么怎么将第三方jar包中的xml去配置化了? 下面,我们就以Quartz定时任务为例,单独对这个问题来进行说明,如何实现去配 ...

  2. springboot 加载配置信息(静态)

    springboot 加载配置信息(静态) 举例:动态设置验证码过期时间 application-uat.properties配置(文件路径:/src/main/resources/applicati ...

  3. springboot 加载一个properties文件转换为对象、List和Map数据结构

    springboot 加载一个properties文件转换为对象.List和Map数据结构 一.springboot 加载一个properties文件转换为对象 1.1.配置文件-blog.prope ...

  4. SpringBoot加载spring.factories的价值

    SpringBoot加载spring.factories的价值 在springboot的各个依赖包下,我们经常看到META-INF/spring.factories这个文件.spring.factor ...

  5. SpringBoot 加载不出来application.yml文件

    摘要 记录一次SpringBoot加载不出来application.yml文件的问题解决过程 问题 配置了application.yml文件,但是映射到properties bean的时候失败 @Co ...

  6. JS动态加载脚本及对动态脚本内方法的调用

    JS动态加载脚本及对动态脚本内方法的调用 摘要 JS动态加载脚本及对动态脚本内方法的调用 JS 动态 添加脚本 按需加载 首先我们需要一个被加载的js文件,我在一个固定文件夹下创建了一个package ...

  7. Linux下C/C++程序编译链接加载过程中的常见问题及解决方法

    Linux下C/C++程序编译链接加载过程中的常见问题及解决方法 1 头文件包含的问题 报错信息 该错误通常发生在编译时,常见报错信息如下: run.cpp:2:10: fatal error: dl ...

  8. 加快网页加载速度的五个有效的方法

    加快网页加载速度的五个有效的方法 Filed under: 未分类 | Posted on  五月 1st, 2010 by 林涛 网页尽可能的快速加载对网站非常重要:用户希望快速的查看他们想要看的页 ...

  9. 在Arcmap中加载互联网地图资源的4种方法

    在Arcmap中加载互联网地图资源的4种方法 前一段时间想在Arcmap中打开互联网地图中的地图数据,如影像数据.基础地图数据等,经过简单研究目前总结了四种方法,整理下与大家分享,有些内容可能理解有误 ...

最新文章

  1. ICCV 2021 Workshop 盘点
  2. 【译】Spring 官方教程:Spring Security 架构
  3. 自学python当黑客-用Python做黑客,暴力破解wifi密码
  4. JQuery 实现 锚点跳转
  5. c++ vector 实战(基本使用)
  6. document.body为null的问题
  7. ASP.NET Web 服务、企业服务和 .NET Remoting 的性能
  8. Vue 项目结构介绍
  9. linux下make 文件写法之简单函数调用
  10. 带刺的下沉市场:小镇青年要的不止是9块9包邮
  11. IC设计EDA软件虚拟机环境配置与安装教程
  12. 在文件保存中 os.getcwd() os.listdir() os.makedirs() os.mkdir() xx.join() ... 等函数 的使用介绍...
  13. 高德地图偏移android,关于JS接高德地图API,以及坐标偏移坐标转换(示例代码)
  14. hadoop安装配置实验报告
  15. 常用测试用例设计方法4-场景法
  16. iai控制器服务器ON信号,IAI控制器型号说明.pdf
  17. 硬核干货 | 人大金仓数据库产品体系合集
  18. 城市消防远程监控系统
  19. Q2 逆势扭亏为盈,群雄环伺之下朴新如何“虎口脱险”?
  20. 一键清除本地缓存的所有无用的docker镜像命令

热门文章

  1. 一篇文章教你如何使用python爬虫
  2. OAuth 2.0 简介
  3. linux shell字符串及字符串长度获取方式
  4. golang配置export GOPRIVATE拉取私有库代码
  5. reactjs生命周期:setState流程 shouldComponentUpdate componentWillUpdate render componentDidUpdate
  6. js中split字符串分割示例
  7. ubuntu21.04安装微信3.2.1(deepin-wine方式)
  8. scala整型的类型及取值范围
  9. Java Object类中的finalize()方法
  10. Python3 字符串复制