Spring Boot配置⽂件的格式

1、Spring Boot 配置⽂件有以下三种:
(1)application.properties
(2)application.yml
(3)application.yaml
2、yml 为yaml的简写, 实际开发中出现频率最⾼. yaml 和yml 的使⽤⽅式⼀样
3、
4、 .properties .yml 并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以 .properties 为主, 也就是 .properties 优先级更⾼
5、properties 是以键值的形式配置的,key 和 value 之间是以"="连接的
# 配置项⽬端⼝号
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=root

6、如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现,@Value 注解使⽤" ${} "的格式读取

 mykey.key1 = bite
import org.springframework.beans.factory.annotation.Value;
2 import org.springframework.web.bind.annotation.RequestMapping;
3 import org.springframework.web.bind.annotation.RestController;
4
5 @RestController
6 public class PropertiesController {
7 @Value("${mykey.key1}")
8 private String key1;
9
10 @RequestMapping("/key")
11 public String key(){
12 return "读取到值:"+key1;
13 }
14 }

7、properties 缺点时具有较多的冗余信息(想要解决这个问题,就可以使⽤ yml 配置⽂件的格式化了)

8、 yml 是树形结构的配置⽂件,它的基础语法是"key: value", key 和 value 之间使⽤英⽂冒号加空格的⽅式组成, 空格不可省略
spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
    username: root
    password: root

9、两者对比

10、yml 配置不同数据类型及 null

# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
# 浮点数
float.value: 3.14159
# Null,~代表null
null.value: ~
# "" 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value:''

11、yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可

12、字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义

string:
 str1: Hello \n Spring Boot.
 str2: 'Hello \n Spring Boot.'
 str3: "Hello \n Spring Boot."

(1)字符串默认不⽤加上单引号或者双引号。
(2)单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串.
(3)双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义
13、 我们还可以在 yml 中配置对象,如下配置
(1)第一种
student:
 id: 1
 name: Java
 age:18

(2)第二种

student: {id: 1,name: Java,age: 18}
(3)这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解
@ConfigurationProperties 来读取
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
 private int id;
 private String name;
 private int age;
}
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
 private int id;
 private String name;
 private int age;

14、配置⽂件也可以配置 list 集合

(1)集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
 private List<String> name;
}
@RestController
public class ReadYml2 {
 @Autowired
 private ListConfig listConfig;
 @RequestMapping("/readList")
 public String readList(){
 return listConfig.toString();
 }
}

15、配置⽂件也可以配置 map

(1)第一种写法

(2)第二种写法

@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
 private HashMap<String,String> map;
}
@RestController
public class ReadYml2 {
 @Autowired
 private MapConfig mapConfig;
 @RequestMapping("/readMap")
 public String readStudent(){
 return mapConfig.toString();
 }
}

16、yml缺点

不适合写复杂的配置⽂件

(1)如properties复杂文件格式

keycloak.realm = demo
keycloak.resource = fm-cache-cloud
keycloak.credentials.secret = d4589683-Oce7-4982-bcd3
keycloak.security[0].authRoles[0]= user
keycloak.security[0].collections[0].name = ssologinurl
keycloak.security[0].collections[0].patterns[0] = /login/*

(2)yml格式(太过复杂)

keycloak:
 realm: demo
 resource: fm-cache-cloud
 credentials:
   secret: d4589683-Oce7-4982-bcd3
 security:
   - authRoles:
     - user
   collections:
     - name: ssologinurl
       patterns:
         - /login/*

17、yml的优点

(1)可读性⾼,写法简单, 易于理解
(2)⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态.
(3) ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤
18、总结
(1)properties 是以 key=value 的形式配置的键值类型的配置⽂件, yml 使⽤的是树形配置⽅式.
(2)读取配置⽂件内容, 使⽤ @Value 注解, 注解内使⽤" ${} "的格式读取.
(3)yml 层级之间使⽤换⾏缩进的⽅式配置, key 和 value 之间使⽤": "(英⽂冒号)加空格的⽅式设置, 并 且空格不可省略.
(4)properties 为早期并且默认的配置⽂件格式, 其配置存在⼀定的冗余数据, 使⽤ yml 可以很好的解决 数据冗余的问题, 但不适合复杂配置.
(5)yml 可以和 properties 共存,但⼀个项⽬中建议使⽤⼀种配置类型⽂件.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue + .NetCore前后端分离,不一样的快速发开框架

摘要&#xff1a; 随着前端技术的快速发展&#xff0c;Vue.NetCore框架已成为前后端分离开发中的热门选择。本文将深入探讨Vue.NetCore前后端分离的快速开发框架&#xff0c;以及它如何助力开发人员提高效率、降低开发复杂度。文章将从基础功能、核心优势、适用范围、依赖环境等…

软考之零碎片段记录(一)

2023上半年选择题 一、流水线周期 注&#xff1a;&#xff08;n-1) * 流水线周期 &#xff08;取址时间分析时间执行时间&#xff09; 注&#xff1a;流水线周期&#xff1a;指令中最耗时的部分&#xff08;取址或者分析或者执行&#xff09; # 耗时最高的部分 * &#xff0…

单例设计模式(3)

单例模式&#xff08;3&#xff09; 实现集群环境下的分布式单例类 如何理解单例模式中的唯一性&#xff1f; 单例模式创建的对象是进程唯一的。以springboot应用程序为例&#xff0c;他是一个进程&#xff0c;可能包含多个线程&#xff0c;单例代表在这个进程的某个类是唯一…

Unity 基于Rigidbody2D模块的角色移动

制作好站立和移动的动画后 控制器设计 站立 移动 角色移动代码如下&#xff1a; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine;public class p1_c : MonoBehaviour {// 获取动画组件private Animator …

LeetCode Python - 84. 柱状图中最大的矩形

目录 题目描述解法方法一方法二 运行结果方法一方法二 题目描述 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights …

《最小阻力之路》利用最小阻力路径,采用创造性思维模式,更有效地实现个人愿景和目标 - 三余书屋 3ysw.net

最小阻力之路 大家好&#xff0c;今天我们分享《最小阻力之路》。我们时常听到有人感叹&#xff0c;明明懂得那么多道理&#xff0c;为何生活过得不如意呢&#xff1f;这本书从某种角度回应了这个疑问&#xff0c;作者分析了我们在人生旅途中屡次失败的原因&#xff0c;提出了…

图像分割论文阅读:Automatic Polyp Segmentation via Multi-scale Subtraction Network

这篇论文的主要内容是介绍了一种名为多尺度差值网络&#xff08;MSNet&#xff09;的自动息肉分割方法。 1&#xff0c;模型整体结构 整体结构包括编码器&#xff0c;解码器&#xff0c;编码器和解码器之间是多尺度差值模块模块&#xff08;MSM&#xff09;&#xff0c;以及一…

使用Python实现ID3决策树中特征选择的先后顺序,字节跳动面试真题

def empty1(pri_data): hair [] #[‘长’, ‘短’, ‘短’, ‘长’, ‘短’, ‘短’, ‘长’, ‘长’] voice [] #[‘粗’, ‘粗’, ‘粗’, ‘细’, ‘细’, ‘粗’, ‘粗’, ‘粗’] sex [] #[‘男’, ‘男’, ‘男’, ‘女’, ‘女’, ‘女’, ‘女’, ‘女’] for o…

刷题日记——国家名称排序

7.国家名称排序 分析 一开始打算用二维的字符数组来操作&#xff0c;但是数组指针玩不太明白&#xff0c;于是改用结构体&#xff0c;结构体country里面仅一个成员name&#xff08;字符数组&#xff09;&#xff0c;这样就有两种解题方法&#xff1a; 方法一&#xff1a;使用…

数字化时代多系统安全运维解决方案

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&…

Google 邀请您参加 Build with AI 2024 线下活动

AI 技术正真实地影响并重构着当下的一切&#xff0c;在这个充满无限可能的领域&#xff0c;我们坚信开放的理念和大家的共同努力将推动我们不断创新。现在&#xff0c;Google 诚挚地邀请从事不同工作的开发者参与我们的 Build with AI 2024 线下活动&#xff0c;一同探索 Googl…

软考高级架构师:区块链技术概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

不同Python版本和wxPython版本用pyinstaller打包文件大小对比

1、确定wxPython和Python版本的对应关系 在这里可以找到Python支持的所有wxPython版本&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/wxpython/ 由于Python从3.6版本开始支持f字符串、从3.9版本开始不支持Windows7操作系统&#xff0c;所以我仅筛选3.6-3.8之间的版本…

飞致云开源社区月度动态报告(2024年3月)

自2023年6月起&#xff0c;中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

54 npm run serve 和 npm run build 输出的关联和差异

前言 通常来说 我们开发的时候一般会用到的命令是 “npm run serve”, “npm run build” 前者会编译当前项目, 然后将编译之后的结果以 node 的形式启动一个服务, 暴露相关业务资源, 因此 我们可以通过 该服务访问到当前项目 后者是编译当前项目, 然后做一下最小化代码的优…

从0开始搭建基于VUE的前端项目(一)

准备与版本 安装nodejs(v20.11.1)安装vue脚手架(@vue/cli 5.0.8) ,参考(https://cli.vuejs.org/zh/)vue版本(2.7.16),vue2的最后一个版本vue.config.js的配置详解(https://cli.vuejs.org/zh/config/)初始化项目 创建一个git项目(可以去gitee/github上创建),注意创建一个…

Microsoft Visual C ++ 2019 Redistributable Package

故障现象&#xff1a; 打算安装Oracle VM Virutalbox 7.0.14&#xff0c;双击exe文件后&#xff0c;出现如下弹框&#xff1a; Oracle VM Virutalbox 7.0.14 needs the Microsoft Visual C 2019 Redistributable Package being installled first. Please install and restar…

Verilog语法之if-else语句学习

if_else 条件分支语句的作用是根据指定的判断条件是否满足来确定下一步要执行的操作。它在使用时可以采用如下三种形式&#xff1a; if(<条件表达式>) 语句或语句块&#xff1a; 在 if_else 条件语句的这种使用形式中没有出现else 项&#xff0c;这种情况下条件分支…

Android MediaRecorder

AndroidManifest.xml中添加权限标记 <uses-permission android:name"android.permission.RECORD_AUDIO"/> 动态添加权限MainActivity requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO},100); 创建MediaReco…

Java:抽象类相关

引言&#xff1a; 在Java编程语言中&#xff0c;抽象类是一种不能被实例化的重要类型&#xff0c;它为类的层次结构提供了一个基础框架。抽象类可以包含抽象方法和具体方法&#xff0c;它们通常用作其他类的父类或基类。本文将详细探讨Java中抽象类的概念、如何使用它们以及在设…