Spring Boot 中的外部化配置

Spring Boot 中的外部化配置

  • 一、配置文件基础
    • 1.配置文件格式
      • (1)YAML 基本语法规则
      • (2)YAML 支持三种数据结构
    • 2.application 文件
    • 3.application.properties 配置文件
    • 4.application.yml 配置文件
    • 5.Environment
    • 6.组织多文件
    • 7.多环境配置
  • 二、绑定 Bean
    • 1.多个简单的属性绑定
    • 2.嵌套 Bean
    • 3.扫描注解
    • 4.处理第三方库对象
    • 5.集合 Map、List 以及 Array
    • 6.指定数据源文件
  • 三、总结
    • 1.@Value:用于绑定单个属性
    • 2.绑定Bean:用于多个属性。


  • 应用程序 = 代码 + 数据(数据库,文件,url)
  • 应用程序的配置文件:Spring Boot 允许在代码之外,提供应用程序运行的数据,以便在不同的环境中使用相同的应用程序代码。避免硬编码,提供系统的灵活性。可使用各种外部配置源,包括 Java 属性文件YAML 文件、 环境变量命令行参数
  • 项目中经常使用 properties 与 yaml 文件,其次是命令行参数。

一、配置文件基础

1.配置文件格式

  • 配置文件有两种格式:properties 和 yaml(yml)。
    • properties 是 Java 中常用的一种配置文件格式,key=value。key 是唯一的,文件扩展名为 properties。
      • 关于 properties 文件格式的相关知识详见我的博客 ===> properties 属性配置文件
    • yaml(YAML,Ain’t Markup Language)也叫做 yml,是一种配置文件的数据格式,基本的语法 key:[这里必须有一个空格]值。yml文件的文件扩展名是 yaml 或 yml(常用)

(1)YAML 基本语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进可以使用空格,不允许使用 Tab 键
  • 缩进的空格数目不重要,相同层级的元素左侧对齐即可
  • # 字符表示注释,只支持单行注释。# 放在注释行的第一个字符
  • 总结:YAML 缩进必须使用空格,而且区分大小写,建议编写 YAML 文件只用小写和空格。

(2)YAML 支持三种数据结构

  • 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
#Map<String, User> users
users:user1:name: 张三age: 20sex:user2:name: 李四age: 22sex:
  • 数组:一组按次序排列的值,又称序列(sequence)/列表(list)
#集合以及数组
#List<Login> logins
logins:- login1:username: zhangsanpassword: 123456- login2: username: wangwupassword: 654321
#String[] names
names:- lisi- zhangsan
  • 标量(scalars):单个的,不可再分的值,例如数字、字符串、true|false 等
# 标量
security:username: zhangsanpassword: 123456
  • 注意:
    • “-” 表示集合的一个成员,因为成员是对象,需要属性名称指定属性值。
    • LIst 和 数组前面加入 “-” 表示一个成员。
    • Map 直接指定 key 和 value,无需 “-”。

2.application 文件

  • Spring Boot 同时支持 properties 和 yaml 格式的配置文件。配置文件名称默认是 application。我们可以使用 application.properties ,application.yaml。
  • 读取配置文件的 key 值,注入到 Bean 的属性可用@Value,@Value 一次注入一个 key 值。将多个 key 值绑定到 Bean 的多个属性用到 @ConfiguraionProperties 注解。 在代码中访问属性除了注解,Spring 提供了外部化配置的抽象对象 Environment。Environment 包含了几乎所有外部配置文件、环境变量,命令行参数的所有 key 和 value。需要使用 Environment 的注入此对象吗,调用它的方法 getProperty(String key) 方法即可。
  • 注意:
    • Spring Boot 建议使用一种格式的配置文件,如果 properties 和 yml 都存在。properties 文件优先。推荐使用 yml 文件。
    • application 配置文件的名称和位置都可以修改。约定名称为 application,位置在 resource 目录下。

3.application.properties 配置文件

  • 注解 @Value的语法格式:@Value(${“key:默认值”})
    在这里插入图片描述

4.application.yml 配置文件

在这里插入图片描述

5.Environment

  • Environment 是外部化的抽象,是众多数据来源的集合。从中可以读取 application配置文件,环境变量,系统属性。使用方式 在 Bean 中注入 Environment。调用它的 getProperty(String key) 方法。
    在这里插入图片描述

6.组织多文件

  • 大型集成的第三方框架,中间件比较多。每个框架的配置细节相对复杂。如果都将配置集中到一个 application 文件中,导致文件内容多,不易阅读。我们为每个框架建立一个独立的配置文件,最后将多个文件集中到 application 文件中。我们使用导入文件的功能。
  • 导入文件的语法: spring.config.import: conf/db.yml, conf/redis.yml
    • 导入多个配置文件,“,”作为分隔符。
      在这里插入图片描述

7.多环境配置

  • 在软件开发中环境的概念:影响软件运行的配置就叫做环境。例如应用访问数据库的 ip,用户名和密码,Rides 的端口,配置文件的路径,操作系统,服务器等。围绕着程序周围的都是环境。环境影响软件的运行。
  • Spring Profiles 表示环境,Profiles 有助于隔离应用程序配置,并使它们仅在某些环境中可用。常说开发环境、测试环境、生产环境等。一个环境就是一组相关的配置数据,支撑我们的应用在这些配置下运行。应用程序启动时指定适合的环境。
  • Spring Boot 规定环境文件的名称 application-{profile}.properties(yml)。其中 profile 为自定义的环境名称。profile是可以自定义的,但是一般推荐如下命名:
    • dev 表示开发。
    • test 表示测试。
    • prod 表示生产。
    • feature 表示特性。
  • Spring Boot 会加载 application 以及 application-{profile} 两类文件,不是单独加载 application-{profile}。
  • **在application-{profile}中设置环境名的语法:**spring.config.activate.on-profile: dev
  • 在application中激活环境的语法: spring.profiles.active: dev
    在这里插入图片描述

二、绑定 Bean

  • @Value 绑定单个属性,当属性较多时不方便,Spring Boot 提供了另一种。将多个配置项绑定到 Bean 的属性,提供强类型的 Bean。Bean 能够访问到配置数据。
  • 基本原则:标准的 JavaBean 有无参数构造方法,包含属性的访问器。配合 @ConfigurationProperties 注解一起使用。Bean 的 static 属性不支持。
  • Spring Boot 自动配置中大量使用了绑定 Bean 与 @ConfigurationProperties,提供对框架的定制参数。项目中要使用的数据如果是可变的,推荐在 yml 或 properties 中提供。项目代码具有较大的灵活性。
  • @ConfigurationProperties 能够配置多个简单类型的属性,同时支持 Map、List、数组类型。对属性还能验证基本格式。

1.多个简单的属性绑定

  • @ConfigurationProperties 声明在类上,表示绑定属性到此类。prefix 表示前缀,是配置文件中多个 key 的公共前缀。这些 key 以 “.” 作为分隔符。例如 app.name,app: name等。prefix=“app”,将文件中 app 开始的 key 都找到,调用与 key 相同名称的 setxxx 方法。如果有给属性赋值成功。没有的忽略。
    在这里插入图片描述

2.嵌套 Bean

在这里插入图片描述

3.扫描注解

  • @ConfigurationProperties 注解起作用,还需要@EnableConfigurationProperties 或@ConfigurationPropertiesScan。这两个注解是专门寻找@ConfigurationProperties注解的,将他的对象注入到 Spring 容器。在启动类(配置类)上使用扫描注解。
    在这里插入图片描述
  • @EnableConfigurationProperties 适用于比较零散的类的情况。
  • @ConfigurationPropertiesScan 适用于整个的包扫描

4.处理第三方库对象

  • 如果某个类需要在配置文件中提供数据,但是没有源代码。此时 @ConfigurationProperties 结合 @Bean 在方法上一起使用。
  • 例如下面假如 AppConfiguration 类是第三方库中的类:
    在这里插入图片描述

5.集合 Map、List 以及 Array

在这里插入图片描述

6.指定数据源文件

  • application 做配置是经常使用的,除此以外我们能够指定某个文件作为数据源。@PropertiesSource 是主力,用以加载指定的 properties 文件。@Properties 与 @Configuration 一同使用,其他注解还有 #Value,@ConfigurationProperties。
    在这里插入图片描述

三、总结

1.@Value:用于绑定单个属性

  • 读取数据:@Value(“${key:defalutValue}”),使用 Environment.getProperties(“key”, “defalutValue”) 获取的是单个值(String,int,long,float,double等)

2.绑定Bean:用于多个属性。

  • 注解:@ConfigurationProperties
    • 位置:
      • ① 在类的上面,需要有源代码。
      • ② 方法上面,使用第三方对象。配合 @Bean 注解。
  • 数据来源 application 文件(properties 或 yml)
    • 指定数据来源 @PropertiesSource(value = “classpath:/xxxx.properties”)
  • 注意:
    • ① 类中有无参数构造方法。
    • ② 属性有 setxxxx 方法。
    • ③ static 属性无效。
    • ④ 使用 bean 的构造方法也能创建对象,无需 set 方法。
  • @ ConfigurationProperties 使用需要配合其他注解:
    • @Configuration
    • @EnableConfigurationProperties
    • @ConfigurationPropertiesScan
    • @Bean
  • 配置文件 application 名称和位置都是可以改变的。
  • application配置文件的位置:
    • 项目的根目录下
    • 项目根目录的 /config目录
    • resources/config
    • resources目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Soul CEO张璐积极履行反诈责任,倡导共建安全网络

近期,备受期待的反诈电影《鹦鹉杀》热映,深入剖析杀猪盘这一网络诈骗行为。为协助更多人增强反诈意识,备受欢迎的社交应用Soul App积极响应,在Soul CEO张璐的带领下,邀请电影中的演员和平台的反诈中心共同参与反诈宣传。此外,一旦用户在平台搜索“诈骗”、“杀猪盘”、“鹦鹉杀…

《WebKit 技术内幕》学习之十五(4):Web前端的未来

4 Cordova项目 Cordova是一个开源项目&#xff0c;能够提供将Web网页打包成本地应用格式的可运行文件。读者可能对Cordova项目陌生&#xff0c;但是大家可能对它的前身非常熟悉&#xff0c;那就是PhoneGap项目&#xff0c;它后来被Adobe公司收购。 图15-4描述了Cordova的主要工…

protobuf消息定义和使用注意事项

如果涉及到多端通讯&#xff0c;定义的protobuf消息格式可能不一样&#xff0c;会导致出现各种问题&#xff0c;比如名称或者消息的先后顺序&#xff0c;或者每个消息的id顺序不一致&#xff0c;都有可能导致解析不出来&#xff0c;我这里总结一下。 message消息名称可以不一致…

Ubuntu20.4 Mono C# gtk 编程习练笔记(四)

连续实时绘图 图看上去不是很清晰&#xff0c;KAZAM录屏AVI尺寸80MB&#xff0c; 转换成gif后10MB, 按CSDN对GIF要求&#xff0c;把它剪裁缩小压缩成了上面的GIF&#xff0c;图像质量大不如原屏AVI&#xff0c;但应该能说明原意&#xff1a;随机数据随时间绘制在 gtk 的 drawin…

Windows Server 安装 Docker

一、简介 Docker 不是一个通用容器工具&#xff0c;它依赖运行的 Linux 内核环境。Docker 实质上是在运行的 Linux 服务器上制造了一个隔离的文件环境&#xff0c;所以它执行的效率几乎等同于所部署的 Linux 主机服务器性能。因此&#xff0c;Docker 必须部署在 Linux 内核系统…

Leetcode 1268 搜索推荐系统

题目信息 LeetoCode地址: 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目理解 这道题的题意不难理解&#xff0c;在我们使用搜索引擎的每一天都会遇到&#xff0c;不需要输入完整的关键词&#xff0c;哪怕仅仅只输入一个字&#xff0c;搜索引…

【ArcGIS微课1000例】0095:横向图例制作案例教程

文章目录 一、加载数据二、高程分级显示三、横向图例四、注意事项一、加载数据 为了便于直观演示,本实验加载一个栅格数据(配套实验数据包中的0095.rar)并进行分级显示,效果如下: 二、高程分级显示 双击dem数据图层,打开栅格数据的【图层属性】对话框,切换到【符号系统…

最长公共子串的问题(正常方法和矩阵法,动态规划)

题目&#xff1a; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符…

Java通过模板替换实现excel的传参填写

以模板为例子 将上面$转义的内容替换即可 package com.gxuwz.zjh.util;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.util.HashMap; import java.util.Map; import java.io.IOException; impor…

这些SQL你练习过吗?(网友提供的SQL)

行转列SQL练习 题目 把图1转换成图2结果展示 图1 CREATE TABLE TEST_TB_GRADE (ID int(10) NOT NULL AUTO_INCREMENT,USER_NAME varchar(20) DEFAULT NULL,COURSE varchar(20) DEFAULT NULL,SCORE float DEFAULT 0,PRIMARY KEY (ID) )insert into TEST_TB_GRADE(USER_NAME, CO…

STM32单片机项目之多功能智能小车硬件设计

基于STM32单片机多功能智能小车功能说明&#xff1a; TFTLCD显示按键LVGL&#xff08;菜单、小车工作模式选择、设置&#xff09;手机蓝牙遥控模式射频手柄遥控模式5路红外寻迹模式超声波避障模式语音播报低功耗控制 硬件原理图设计 单片机最小系统&#xff1a; 由于要使用…

滴滴开源小程序框架 Mpx 新特性:局部运行时能力增强

Mpx 是滴滴开源的一款增强型跨端小程序框架&#xff0c;自 2018 年立项开源以来如今已经进入第六个年头&#xff0c;在这六年间&#xff0c;Mpx 根植于业务&#xff0c;与业务共同成长&#xff0c;针对小程序业务开发中遇到的各类痛点问题提出了解决方案&#xff0c;并在滴滴内…

NVIDIA Isaac ROS - 入门教程(一)

系列文章目录 前言 欢迎访问 Isaac ROS&#xff0c;这是一套硬件加速、高性能、低延迟的 ROS 2 软件包&#xff0c;用于制造自主机器人&#xff0c;充分利用 Jetson 和其他英伟达平台的强大功能。 查看入门指南&#xff0c;开始使用 Isaac ROS。设置 Isaac ROS Buildfarm&…

如何让思维系统化,拥有「自己的想法」?

先思考一个问题&#xff1a; 如果外星人来访地球&#xff0c;你觉得他们更有可能是善意的&#xff0c;还是恶意的&#xff1f; 你的反应是什么&#xff0c;会如何切入思考&#xff1f; 一般人可能会这样回答&#xff1a; 当然是恶意的&#xff0c;因为要争夺资源啊&#xff0c;…

25考研政治备考计划

各位小伙伴大家好&#xff0c;今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段&#xff0c;直接就是强化&#xff0c;强化的内容也就是听课&#xff0c;刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课&#xff0c;推荐刷肖1000 *9月中-10月中 背腿姐的背…

ELK+Filebeat 部署实验

Filebeat是轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat&#xff0c;并指定目录与日志格式&#xff0c;Filebeat 就能快速收集数据&#xff0c;并发送给 logstash 进行解析&#xff0c;或是直接发给 Elasticsearch 存储&#xff0c;性能上相比运行…

MySQL介绍、安装和卸载

MySQL入门——网安基础 1. 数据库基本概念2. 数据库类型和常见的关系型数据库2.1 数据库类型2.2 常见的关系型数据库 3. MySQL介绍4. MySQL8的安装和卸载 1. 数据库基本概念 1. 数据 所谓数据&#xff08;Data&#xff09;是指对客观事物进行描述并可以鉴别的符号&#xff0c;…

万物简单AIoT 端云一体实战案例学习 之 空气质量检测系统

学物联网,来万物简单IoT物联网!! 下图是本案的3步导学,每个步骤中实现的功能请参考图中的说明。 1、简介 环境污染、空气污染是人类一直所关心并且讨论的永恒话题,人们对优质的环境和健康的身体非常向往。因此,如果有一种可以检测周围环境的空气质量的设备并且环境数据…

RocketMQ源码分析之消息重试(真相竟然是延时消息)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 RocketMQ版本 5.1.0 普通消息 消息重试的的实现分并普通消息和顺序消息。两者的重试机制大同小异。我们这里先看看不同消息 这里是官网定义的消息重试次数以及…

docker 存储管理

文章目录 docker 存储管理容器存储方案docker 容器存储解决方案 docker 存储驱动基本概述存储驱动的选择原则主流的 docker 存储驱动docker 版本支持的存储驱动 overlay2 存储驱动OverlayFSoverlay2 存储驱动要求配置 docker 使用 overlay2 驱动 overlay2 存储驱动的工作机制Ov…