SpringBoot——配置文件的分类

2023-11-15

简单介绍:

在之前我们写配置文件的时候,我们直接在项目中的resources下面编写的配置文件,其实除了在这个路径下编写配置文件,还可以在其他的地方编写配置文件,并且不同位置的配置文件在启动的时候的优先级也是不一样的。

1、在resources下编写配置文件:

这种方式是我们最常见的方式,但是在所有的配置文件的优先级中,这种方式是最低的,一般这种方式是在我们开发阶段中使用的配置文件编写方式。

我们在resources文件夹下的配置文件中编写一个配置,将服务器的启动端口设置为81端口,然后我们启动服务器: 

这里服务器端口的默认值8080就被我们自己编写的配置中的81给替换了。

2、在resources的config目录下的配置文件 

在读取配置文件的时候,其实还有一层隐形的目录,就是config目录,他会先在resources的config目录下寻找对应的配置文件,如果没有,再从resources文件夹下开始找,也就是说,如果我们再resources下面创建一个config文件夹,并在里面编写配置文件的话,他会覆盖掉我们直接在resources中编写的配置文件:

我们这次在resources下面的config文件夹中创建配置文件,然后编写一个配置将服务器的端口配置成82端口,这次我们重启服务器,按照我们的猜想,他启动的端口应该是82端口:

 看到他确实是在82端口启动了端口,说明resources下的config文件夹中的配置文件的优先级大于直接在resources下写的配置文件。

3、和Jar包同级的配置文件

在介绍这个配置文件之前,我们先介绍一下打包方式,我们常规的打包方式有两种,一个是war包,一个是jar包,前者是用于web程序的压缩包,jar包是类归档文件,我们的SpringBoot如果要打包的话就需要打包成一个jar包,具体操作步骤如下:

我们使用IDEA工具帮我们完成打包的工作:

我们点击侧边栏中的Maven图标,一开始我们会看到有三个下拉菜单,第一个叫生命周期,第二个是插件,第三个是依赖项,那么IDEA提供了Maven中对应生命周期的按钮,我们直接点击就可以了,这里唯一需要注意的一点就是我们在打包的时候,要点击生命周期里面的package,千万不要点击插件里面的jar,虽然两者都能把项目打包成jar包,但是效果是完全不一样的。

如果你出现了一下的报错信息:

 

【没有主清单属性】,这就表示在你打包的过程中的步骤出错了,我们重新一次就可以了,记住是双击生命周期里面的package:

然后我们就可以在项目中的target中看到我们打包好的jar包:

 

为了方便操作,我们直接把这个jar包复制到D盘根目录下,然后我们直接启动这个jar包:

在黑窗口中使用命令行的方式启动:java -jar 打包好的jar包。这样就启动了我们的jar包,主要是为了脱离我们的IDEA工具,我们肯定不能每次都依靠IDEA启动,毕竟我们肯定不会在服务器上安装一个IDEA的。

然后就开始我们的主要内容,观察我们刚才启动的项目,我们的端口号是不是跟刚才一样还是在82端口启动的,现在我们在这个jar包同级目录下,创建一个配置文件,并且把端口号修改成83:

注意我们配置文件的位置,以及我们在配置文件中编写的内容,然后我们再次启动我们的jar包:

 

这次的端口就变成了我们在jar包同级文件夹下的配置文件中的配置值,那么也就是说,与jar包同级的配置文件优先级大于resources下的config文件夹中的配置文件。

4、与jar包同级的config中的配置文件 

和之前一样,如果我们在jar包的同级目录下创建一个config文件夹,那么这个文件夹中的配置文件的优先级肯定是最高的:

 

总结: 

在我们的配置文件的等级划分中,优先级由低到高分别是:resources中的配置文件<resources中的config中的配置文件<与jar包同级的配置文件<与jar包同级的config文件夹中的配置文件

那么为什么要分这么多的等级呢?

我们在做项目的时候,开发环境和实际的部署环境可能有很大的出入,或者是在部署环境中的一些敏感信息不希望开发人员知道,所以开发人员就在自己的模拟环境中使用一套配置文件进行开发。然后更高一级的,就留给运维的人做测试,再高的就交给其他的人这样就有了配置文件的等级划分,以及优先级高的配置文件会直接覆盖低级的配置文件,防止出错。

一般来讲,优先级低的两个位置用于在项目验收阶段做整体的调控,更高的两个位置用于项目在上线的时候做调控。

一些有关打包时候的理论知识:

在我们之前打包的时候,说过如果我们使用了错误的打包方式,会导致我们的在直接启动jar包的时候无法启动,要用正确的maven的方式去打包才行,那么这两种打包出来的jar包有何区别呢?

在我们使用Maven的生命周期的时候,他会调用我们的打包插件,这个插件是我们在创建SPringBoot项目的时候他自己帮我们导入的,就是这个东西:

那么他干了什么呢,首先,他为了能让你的项目单独的跑起来,他把你项目中用到的jar包全都给你连带着一起打包了,所以如果你去看一下刚才我们打出来的jar包的属性的话,你会发现他比较大,就是因为里面有很多的jar包。

除了jar包,里面还有一个工具类,这个工具类的作用是帮我们的程序单独运行用的,也就是说,这个jar包除了你自己写的代码占很少的一一部分,其他的很大的部分其实都是为了让你的程序可以单独运行而放置的依赖项。

那么之后这样,一个完整的可独立运行程序才算完整,就可以在任何的安装了java的平台上运行,比如Linxu环境的服务器上,或者是Win的服务器,这就是Java的跨平台特性了。

临时属性: 

除了在配置文件中配置属性,我们也可以使用临时属性的方式,在启动项目的时候配置一些属性,让这些属性在单次启动的临时生效:

我们在启动的时候添加这样的参数,参数的写法是有要求的,参数前面要用-- 两个横线,多个参数之间用空格隔开,然后是k-v的写法,然后我们启动项目,这样项目就会在85端口启动:

 

临时属性的优先级很高,所以如果你想临时覆盖一些属性也可以使用这种方式。

除了在命令行中使用临时属性,在IDEA中也是可以使用临时属性的:

 

我们点击右上角的运行选项,然后点击编辑配置:

在这里可以添加运行的参数,如果你使用的IDEA版本太高没有这个框框,那么你需要点击一下右上方的蓝色字“修改选项” :

点击程序实参然后添加上去就可以了。

那么参数是如何传递的呢?我们打开引导类:

 看到这个main方法的ages选项了吗,我们刚才配置的环境变量的信息都会封装到这里面,然后SpringBoot的方法用这个参数当做方法的参数,这样就将我们配置的临时属性传递进去了。你要是不信你可以输出一下试一试:

 我们打印一下agrs变量里面的信息:

第一行就输出了我们之前配置的程序实参的内容,这是一个固定的写法,并不是SpringBoot的特特性,也就是说我们以后如果遇到了需要些配置项,或者写命令参数的地方,也可以使用这种方法进行传递。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot——配置文件的分类 的相关文章

  • ExceptionConverter:java.io.IOException:文档没有页面。我正在使用 iText

    当我执行下面的代码时 File f new File c sample pdf PdfWriter getInstance document new FileOutputStream f document open System out p
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • 当分配给变量时,我可以以某种方式重用 Gremlin GraphTraversals 代码吗?

    我有看起来像这样的 GraphTraversals attrGroup GraphTraversal
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • Microsoft Graph 身份验证 - 委派权限

    我可以使用 Microsoft Graph 访问资源无需用户即可访问 https developer microsoft com en us graph docs concepts auth v2 service 但是 此方法不允许我访问需
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • 检查 protobuf 消息 - 如何按名称获取字段值?

    我似乎无法找到一种方法来验证 protobuf 消息中字段的值 而无需显式调用其 getter 我看到周围的例子使用Descriptors FieldDescriptor实例到达消息映射内部 但它们要么基于迭代器 要么由字段号驱动 一旦我有
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 《手把手教你》系列练习篇之4-python+ selenium自动化测试(详细教程)

    1 简介 今天我们继续前边的练习 学习和练习一下 如何使用webdriver方法获取当前测试页面的URL 如何获取当前页面的title 如何打开浏览器的一个新建页面 如何操作单选按钮等等 这些小练习 来巩固基础 2 webdriver方法获
  • WebGL 实践篇(二)—— 屏幕坐标与裁剪坐标,片段着色器中的颜色定义

    一 裁剪坐标系 canvas坐标系以及屏幕坐标系 裁剪坐标 WebGL坐标系 的范围 1 1 原点在中间 x正值向右 y正值向上 屏幕坐标 原点在左上角 x正值向右 y正值向下 canvas坐标 与屏幕坐标相比 原点向右向下偏移 x y正值
  • 如何安装Jenkins并配置插件(清华源)

    Linux启动jenkins 将 jenkins war 放在 usr local jenkins 目录下 执行命令启动 Jenkins 1 nohup java jar jenkins war httpPort 8000 安装Jenkin
  • Gateway服务的搭建

    1 Gateway的作用 网关的核心功能特性 请求路由 权限控制 限流 架构图 权限控制 网关作为微服务入口 需要校验用户是是否有请求资格 如果没有则进行拦截 路由和负载均衡 一切请求都必须先经过gateway 但网关不处理业务 而是根据某
  • 微信公众号第三方平台开发,零基础入门。想学我教你啊

    在学习微信第三方平台开发之前你应该会的 1 常用接口测试工具的使用 postman 2 学会看第三方平台文档 这个很关键 不过很多还是喜欢百度 白嫖别人的操作文档 3 学习排查问题 分析问题 4 第三方平台的限制 和公众号 订阅号这些关系要
  • 前端node.js上传文件到服务器_从零开始: nodejs 搭建文件索引服务器(Part 1)

    在考虑要用nodejs搭建文件索引服务器来替代我原来那个笨重的Apache服务器 采用省心的bitnami lampstack搭建 然后配了背景图片和图标 之前 说实话我连javascript是什么都不清楚 所以 从语言上讲 确实是从零开始
  • 06-Redis缓存高可用集群

    上一篇 05 Redis高可用集群之水平扩展 1 集群方案比较 哨兵模式 在redis3 0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态 如果master节点异常 则会做主从切换 将某一台slave作为
  • JavaScript基础知识09——数据类型

    哈喽 大家好啊 这里是雷工笔记 我是雷工 数据类型比较常见 无论是对程序员 还是电气工程师来说 都再熟悉不过了 这里跟着教程了解一下 主要看跟自己以往在其他PLC C 组态软件中应用的有啥不同 一 了解数据类型 在计算机的世界就像黑客帝国中
  • 12306 APP 同一乘客、同列火车候补订单与硬座的处理规则!

    问题 国庆节没抢到回家的火车票 候补了该列车的卧铺 怕候补不到车票 又买了该列车的硬座 当候补订单候补到卧铺车票时 怎么处理 方案 结论 直接候补不成功 提示 XX 二代身份证 xxx 存在与本次购票行程冲突的车票
  • ctfshow- web1(50 point)

    0x00 前言 CTF 加解密合集 CTF Web合集 0x01 题目 0x02 Write Up 首先映入眼帘的是登录界面 尝试弱口令无果 可以注册 尝试注册一个账号 通过url发现这里是通过order by进行了排序 测试发现一共5个字
  • CSDN竞赛6期题解

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 请不要删掉此地址 总结 这次竞赛题目比较简单 没多大必要写题解 更多的还是给出自己的一些体会和建议吧 很多同学已经对比赛规则和编程体验给出了
  • 使用mod_deflate模块压缩页面优化传输速度

    在HTTPD主配置文件中添加如下 并确保deflate模块是启用的 vim etc httpd conf httpd conf SetOutputFilter DEFLATE 调用一个叫DEFLATE输出过滤器 mod deflate co
  • 信息与网络安全基础知识汇总

    一 概述 1 网络信息安全基本概念 信息安全 是指信息网络中的硬件 软件及其系统中的数据受到保护 不受偶然的或者恶意的原因而遭到破坏 更改 泄露 否认等 系统连续可靠正常的运行 信息服务不中断 密码学 是结合数学 计算机科学 电子与通信等学
  • Linux的find命令

    一 find语法 find path option print exec ok command find 路径 参数 二 使用 通过文件名查找 find name 文件名 find etc name passwd 查找 etc目录下的pas
  • easychat项目讲解

    项目简介 本项目是基于Websocket和Servlet实现的多用户聊天室 实现了聊天所需的一些基本功能 功能描述 1 用户信息注册 2 登录 同时标识上 下线用户 3 私聊 点击好友列表中指定用户进行私聊 4 群聊 点击好友列表指定用户建
  • 2023最新ELK搭建教程,基于ES 8

    一 ELK介绍 ELK的应用 ELK的应用场景 日志查询 问题排查 上线检查服务器监控 应用监控 错误报警Bug管理性能分析 用户行为分析 安全漏洞分析 企业 行业 ELK用途 阿里巴巴 电子商务 云计算 用于日志管理和实时监控 腾讯 互联
  • 蓝桥杯客观题知识点

    一 异步和同步的在于 有无统一的时钟信号 异步无 同步有 RS485 半双工 异步 串行 差分输入 多级通信 USB 键盘等外设 RS232 全双工 异步 串行 单端输入 一对一通信 二 组合逻辑电路和时序逻辑电路的区别 组合 任意时刻的输
  • 整数转换成罗马数字

    给定一个整数num 1 lt num lt 3999 将整数转换成罗马数字 如1 2 3 4 5对应的罗马数字分别位I II III IV V等 格式 第一行输入一个整数 接下来输出对应的罗马数字 输入 123 输出 CXXIII 我的解法
  • 如何让Object 变得有序

    如何让Object 变得有序 1 方法一 继承Comparable 实现CompareTo方法 CompareTo 只有一个参数 但它有四个限制条件 具体我也没有研究 可查看相关信息 如果该类实现这个方法它就具有比较规则定义 那么以后放在C
  • SpringBoot——配置文件的分类

    简单介绍 在之前我们写配置文件的时候 我们直接在项目中的resources下面编写的配置文件 其实除了在这个路径下编写配置文件 还可以在其他的地方编写配置文件 并且不同位置的配置文件在启动的时候的优先级也是不一样的 1 在resources