前言

有的时候,配置信息是我们无法在开发过程中就能确定的。比如,给客户开发的项目,客户需要根据自身的情况自定义配置,如数据库配置,加密密钥配置等等。这时候,就需要把配置文件放在外面,让用户自定义配置部署了。

SpringBoot应对这种情况简直就是游刃有余,其有多种加载配置文件的方式。下面我们就来认识一下

配置文件放在外部

SpringBoot支持把配置文件放在外部。只要把配置文件放在jar包的同级目录下,或者放在同级下的config文件夹中,SpringBoot都会去此处读取配置文件。现在有一个springboot打包程序,和一个配置文件(jar程序打包的时候,没有设置端口号):

现在启动程序,查看结果:

通过java -jar命令启动,发现其已经读取到了9876这个端口号的配置。

同样的,我们可以放在config目录下再测试看看结果:

依然是在9876端口启动了。

以上两个例子,说明了配置文件是可以放在外部的。

配置文件加载顺序

这里总结下,springboot的配置文件可以打包时打jar包内部,也可以放在jar包外部。springboot的配置文件,还可以放在config目录下(这里包括jar包外部同级的config目录,也包括jar内部的config目录)。

总的来说,配置文件的加载顺序如下:

外部config目录 > 外部同级目录 > jar包内部config目录 > jar包内部同级目录

我们不妨在这四个地方都写同一个配置不同的值来验证一下这个顺序。

在resources目录下创建一个config文件夹,文件夹内的配置端口号为9999,文件夹外部的端口号为8888,如下:

启动程序:

通过结果可以看到,读取的是config目录下的配置文件。

打包测试,两个配置文件的配置如下图所示:

启动测试:

发现启动的是config目录下的配置:7777端口。

接下来,我们只需要再证明外部同级目录 > jar包内部config目录,那么上面的结论就成立了。我们把config目录删掉,然后测试:

这证明了上面的结论:外部config目录 > 外部同级目录 > jar包内部config目录 > jar包内部同级目录 是成立了

配置项默认值

通过上面的分析,我们知道了,外部config目录的配置文件是优先级最高的。假如该配置文件没有设置server.port默认值的时候,那么就会往下一级配置文件去寻值,如果所有配置文件都找不到,那么将会读取默认的值。server.port这个默认值,是springboot内部给我们提供的,其默认就是8080。

那么我们要怎么给我们自定义的配置项设置默认值呢?其实很简单,只需要使用一个":"即可

启动程序,访问该接口:

我们没有在任何一处配置文件中配置name的值,所以读取了默认值。

总结

本文讲解了SpringBoot项目的多种放配置文件的方式,并且讲解了各种配置文件的加载顺序。在配置文件中都不存在值的时候,最后才会去读取默认值。配置文件的加载顺序,在实际开发中,还是经常会涉及到的。

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置的更多相关文章

  1. 「快学springboot」集成Spring Security实现鉴权功能

    Spring Security介绍 Spring Security是Spring全家桶中的处理身份和权限问题的一员.Spring Security可以根据使用者的需要定制相关的角色身份和身份所具有的权 ...

  2. 「快学springboot」SpringBoot整合freeMark模板引擎

    前言 虽然现在流行前后端分离开发和部署,但是有时候还是需要用到服务端渲染页面的.比如:需要考虑到SEO优化等问题的时候,FreeMark其实还是很有作用的.本人的博客本来是用React开发的,但是后来 ...

  3. 「快学springboot」SpringBoot多环境配置文件

    前言 我们都知道springboot的配置卸载application.properties配置文件上(或者application.yml).但是,如果想要把不同的环境(如开发环境,测试环境,生产环境) ...

  4. 「快学springboot」16.让swagger帮忙写接口文档

    swagger简介 官方的介绍 THE WORLD'S MOST POPULAR API TOOLING Swagger is the world's largest framework of API ...

  5. springboot 配置文件的加载顺序

    springboot 配置文件的加载顺序1.在命令行中传入的参数.2. SPRING APPLICATION JSON中的属性. SPRING_APPLICATION—JSON是以JSON格式配置在系 ...

  6. 如果你还不知道如何控制springboot中bean的加载顺序,那你一定要看此篇

    1.为什么需要控制加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功 ...

  7. dubbo配置文件的加载顺序详解(图示)

    Dubbo配置文件的加载顺序 ​ 在使用apache dubbo.version2.7.3 时,配置文件的加载情况.以provider提供服务者为例. 配置文件 ,以下四个配置文件. 其优先级 app ...

  8. Spring Boot配置文件的加载顺序

    配置文件的加载顺序, 后加载的会覆盖先加载的:也就是properties配置文件的内容会替换掉.yml及.yaml文件的内容

  9. 2 Struts2的执行流程&配置文件的加载顺序

    执行流程: 访问前段页面,通过url访问action 访问xml中Struts2核心过滤器,并执行一组拦截器(这组拦截器在struts-default.xml中,实现了部分功能) 通过action配置 ...

随机推荐

  1. 每天进步一点点------YUV格式详细解释

    YUV格式详细解释 YUV开放分类: 网络.计算机.手机.色彩学.影像学  概述  YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式 ...

  2. ElementUI+Vue在使用el-dialog时,如何做到在弹出dialog时,外部呈锁定状态,而不是点击外部导致dialog直接关闭。

    ElementUI+Vue在使用el-dialog时,如何做到在弹出dialog时,外部呈锁定状态,而不是点击外部导致dialog直接关闭. 问题描述 今天,在做Element+Vue项目时发现:Di ...

  3. webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:

    webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...

  4. mybatis用mysql数据库自增主键,插入一条记录返回新增记录的自增主键ID

    今天在敲代码的时候遇到一个问题,就是往数据库里插入一条记录后需要返回这个新增记录的ID(自增主键), 公司框架用的是mybatis的通用Mapper接口,里面的插入方法貌似是不能把新纪录的ID回填到对 ...

  5. Django 创建app 应用,数据库配置

    一.create project mkdir jango cd jango 目录创建project myapp django-admin startproject myapp 2.在给project创 ...

  6. [AST Babel Plugin] Transform code, add line:column number for console log

    For example we have current code: function add(a, b) { console.log(a, b) return a + b } function sub ...

  7. Django跨域:

    下包 pip install django-cors-headers 下面的操作在setting里 添加到appps里 INSTALLED_APPS = [ ... 'corsheaders', .. ...

  8. tp5 rewrite nginx 配置

    今天弄了个别人的项目,用的tp5,正好前段时间学tp5了,可是人家竟然用了rewrite,我没学过啊,放在nginx ,全是404,真尴尬 其实很简单,在配置文件里面添加一小段代码就ok了 时间紧张直 ...

  9. CSS制作二级菜单时,二级菜单与一级菜单不对齐

    效果如图: 部分代码如图: <li><a href="#" target="_blank">关于我们</a> <ul& ...

  10. C++的new&delete

    new的过程 new的过程:先分配memory,再调用ctor 我们常用的创建对象的方法有两种 Complex c(1,2); //栈 Complex *pc = new Complex(1,2); ...