SpringBoot(二):配置文件的作用、配置文件的格式、properties配置文件、yml配置文件

news2024/11/24 14:33:43

目录

  • 一、配置文件的作用
  • 二、配置文件的格式
  • 三、properties配置文件
    • 3.1 properties的基本语法
    • 3.2 properties的缺点
    • 3.3 配置自定义内容
    • 3.4 读取配置文件
  • 四、yml配置文件
    • 4.1 yml基本介绍
    • 4.2 yml基本语法
    • 4.3 使用yml配置不同的数据类型
    • 4.4 读取yml配置文件
    • 4.5 在yml中配置对象
    • 4.6 在yml中配置集合
    • 4.7 properties和yml对比

一、配置文件的作用

在整个项目中所有重要的数据都是在配置文件中配置的,比如:

  • 数据库的连接信息(包含用户名和密码)
  • 项目的启动端口
  • 第三方系统的调用密钥等信息
  • 配置日志的等级

二、配置文件的格式

SpringBoot 配置文件主要分一下两种格式:.properties和.yml格式

在这里插入图片描述
【properties和yml】

  • properties 可以和 yml ⼀起存在于⼀个项目当中,当 properties 和 yml ⼀起存在⼀个项目中时,如果配置文件中出现了同样的配置,比如 properties 和 yml 中都配置了“server.port”,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties ⽂件之后,也会加载 .yml 文件的配置信息。
  • properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置文件格式,这样可以更好的维护(降低故障率)

注意:配置文件的名字一定是application

三、properties配置文件

3.1 properties的基本语法

properties是以键值对的形式配置的,key和value之间使用"="连接
在这里插入图片描述

3.2 properties的缺点

在这里插入图片描述
yml格式很好的解决了这个问题

3.3 配置自定义内容

在properties中除了可以配置系统的参数外,还可以配置用户自定义的内容
在这里插入图片描述

3.4 读取配置文件

如果想在项目中读取配置文件的内容,可以通过@Value注解来读取

package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ReadPropertis {

    @Value("${server.port}") //格式一定是 ${key}的形式
    private int port;   //不仅可以读取系统的配置信息,也可以读取用户自定义的配置信息  

    @RequestMapping("/hi")
    public String  displayPort(){
        return "port:"+port;
    }
}

在这里插入图片描述

四、yml配置文件

4.1 yml基本介绍

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另⼀种标记语言”。

【yml的优点】

  • yml可读性高、写法简单、易于理解、语法和json相似
  • yml支持更多的数据类型,支持配置数组、散列表、标量等。: 和value 之间一定要使用空格空开
  • yml支持更多编程语言,包括Java、Golang、PHP、Ruby等

4.2 yml基本语法

yml 是树形结构的配置文件,它的基础语法是“key: value”,注意 key 和 value 之间使用英文冒汗加空格的方式组成的,其中的空格不可省略
在这里插入图片描述

【使用yml连接数据库的写法】
在这里插入图片描述

【yml的配置多级目录的规则】
在这里插入图片描述

4.3 使用yml配置不同的数据类型

在这里插入图片描述

4.4 读取yml配置文件

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

【注意事项】
配置文件中内容:
在这里插入图片描述
读取配置文件的结果:

在这里插入图片描述
结论:

  • 什么都不加和加了单引号中的转义字符原样输出
  • 双引号中的转义字符会发挥出其语义,例如\n,就会产生换行效果

4.5 在yml中配置对象

student:
  id: 1
  name: Java
  age: 18

另一种行内写法:和上面写法等价

student2: {id: 1,name: wp,age: 19}

@Value只能用来读取属性,而不能读取整个对象,要想读取整个对象需要使用@ConfigurationProperties注解:
首先要创建一个student类

package com.example.demo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix = "student2") //将配置文件中的student2配置赋值给当前对象
@Component
public class Student {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

使用student对象

    @Autowired()
    private Student student;
    @PostConstruct
    public void postConstruct() {
        System.out.println(student.getName());
        System.out.println(student.getAge());
    }

执行结果:
在这里插入图片描述

注意:以上代码中的 getter 和 setter 方法不能省略,因为ConfigurationProperties注解在实现时是通过set方法给属性赋值的

4.6 在yml中配置集合

dbtypes:
  list:
    - mysql
    - db2
    - oracle

行内写法:

dbtypes2: {list: [mysql,db2,sqlserver]}

读取集合:

package com.example.demo;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
@ConfigurationProperties(prefix = "dbtypes")
@Data   //生成setter和getter方法
public class Config {
  private List<String> list; //此处的变量名必须和配置文件中的配置的集合名字相同
}

@Autowired
    private Config config;
    @PostConstruct
    public void postConstruct() {
        System.out.println(config.getList().get(0));
        System.out.println(config.getList().get(1));
        System.out.println(config.getList().get(2));

    }

在这里插入图片描述
注意:

在这里插入图片描述

4.7 properties和yml对比

  • properties以key=value的形式配置键值类型的配置文件,yml使用的是类似json格式配置信息,层级之间使用换行缩进的方式区分,key和value之间使用: 和 空格 隔开
  • properties为早期的默认配置文件格式,写法形式会造成代码冗余度过高,yml没有这个问题
  • yml支持配置更多的数据类型
  • yml通用性更好,支持更多的语言

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

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

相关文章

关于UWB汽车钥匙介绍

汽车钥匙经历了机械钥匙、遥控钥匙、PEPS、数字钥匙四个阶段&#xff0c;而数字钥匙又分为BLE/NFC/UWB三种技术路线。由于UWB安全性、定位精度、作用范围明显好于BLE和NFC&#xff0c;因此成为汽车数字钥匙的最优技术。PEPS与数字钥匙PEPS是指无钥匙进入/无钥匙启动系统&#x…

MySQL详解(三)——高级 1.0

MySQL高级 utf8只支持每个字符最多三个字节&#xff0c;而真正的 UTF-8 是每个字符最多四个字节 MySQL 的这个bug一直没有被修复&#xff0c;他们在 2010 年发布了一个叫作“utf8mb4”的字符集&#xff0c;绕过了这个问题。 MySQL优点 Mysql是开源的Mysql是可以定制的&…

CDN的那些事

CDN的那些事一、前言二、基础配置三、访问控制四、缓存配置五、HTTPS配置六、高级配置&#xff08;最重点来了&#xff09;七、结语一、前言 大家好&#xff0c;我是尝试中成长的站长&#xff0c;前段时间&#xff0c;群友的cdn被刷爆了&#xff0c;这就引起了我的恐慌&#x…

读书笔记:神经网络加法层与乘法层的实现及应用 buy_apple_orange.py ← 斋藤康毅

“层”是神经网络中功能的单位。通常把神经网络的“层”实现为一个类。“层”的实现中有两个共通的方法 forward() 和 backward()。forward() 对应正向传播&#xff0c;backward() 对应反向传播。加法结点的反向传播将上游的值原封不动地输出到下游&#xff0c;乘法结点的反向传…

第2章:使用CSS定义样式

在前一章中,我们研究了Java代码的不同片段。 在本章中,我们将对每个示例使用相同的代码段: public void createPdf(String html, String dest) throws IOException {HtmlConverter.convertToPdf(html, new FileOutputStream(dest)); } 我们不看Java代码的不同片段,而是看…

数据分析-深度学习Pytorch Day13

单层感知机和多层感知机(MLP)是最基础的神经网络结构。将卷积操作创新的加入到神经网络结构形成了卷积神经网络&#xff0c;卷积神经网络给现代人工智能注入了活力。感知机网络和卷积网络(CNN)都属于前馈型网络(FeedForward Network)。单层感知机是二分类的线性分类模型&#x…

MT1010-M1016(java版)

MT1010输入和输出字符型数据难度&#xff1a;青铜0时间限制&#xff1a;1秒巴占用内存&#xff1a;64M★收藏△报错请编写一个简单程序&#xff0c;用户输入2个的字符型数据存储在变量中&#xff0c;并分别以字符形式和整数形式输出在屏幕上。格式输入格式&#xff1a;2个的字符…

Go语言DDD实战初级篇

导读 领域驱动设计(DDD)最简洁的描述可能是&#xff1a;如何在明确的限界上下文中创建通用语言的模型。通过 DDD思想设计开发的软件&#xff0c;在领域专家、开发者和软件本身之间不存在“翻译”&#xff0c;三者通过在限界上下文下的通用语言直接表示。而这个系列则是我们团队…

交换机——VLAN原理和基本配置

VLAN原理和配置VLAN的三种端口类型Access&#xff1a;接入链路类型&#xff08;一般使用&#xff1a;交换机与PC&#xff09;Trunk&#xff1a;干道链路类型&#xff08;一般使用&#xff1a;交换机与交换机&#xff09;Hybrid在这里&#xff0c;我们只使用和讲解Access和Trunk…

HTML简介

目录 一、HTML基础知识 二、HTML常见标签 注释标签 标题标签 段落标签 常用的转义字符 换行标签 格式化标签 图片标签 超链接标签 表格标签 列表标签 input标签 文本框 密码框 单选框 复选框 普通按钮 选择文件 下拉标签 多行文本输入 无语…

【哈希表】leetcode454.四数相加II(C/C++/Java/Python/Js)

leetcode454.四数相加II1 题目2 思路3 代码3.1 C版本3.2 C版本3.3 Java版本3.4 Python版本3.5 JavaScript版本4 总结需要哈希的地方都能找到map的身影 1 题目 题源链接 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少…

C中线程信号控制

一、场景介绍存在三个线程&#xff0c;一个主线程和两个子线程&#xff08;子线程数量不固定&#xff09;。为了节省频繁创建销毁线程造成的资源浪费&#xff0c;将这些线程设置为常驻线程。但这样引入了一个新的问题&#xff0c;如何协调这些线程完成工作。主线程内是循环检测…

Webgl实现的天气效果(下雨、下雪)

一、下雨效果如图&#xff1a; 还有一种雨水效果也不错 114 Three.js实现深度遮挡的下雨特效 | 暮志未晚-中文案例网 二、下雪的效果 57 Three.js 使用粒子实现下雪特效 | 暮志未晚-中文案例网 还有一种是通过网页CSS的形式做的2D雪效果 集合在一起的源码&#xff1a; https…

编译原理学习笔记17——语义分析和中间代码生成2

编译原理学习笔记17——语义分析和中间代码生成217.1 赋值语句的翻译17.2数组元素引用的翻译17.3 类型转换17.1 赋值语句的翻译 简单算术表达式及赋值语句 赋值语句生成三地址代码的S-属性文法 赋值语句生成三地址代码的S-属性文法 产生赋值语句三地址代码的翻译模式 产…

你真的了解工厂设计模式吗?(简单工厂模式+工厂方法模式+抽象工厂模式)

工厂解决的问题 客户端在调用是不想判断实例化哪一个类或者实例化的过程过于复杂。在工厂模式中&#xff0c;具体的实现类创建过程对客户端是透明的&#xff0c;客户端不决定具体实例化哪一个类&#xff0c;而是交由“工厂”来实例化。 简单工厂模式 类图 简单工厂模式由三类…

Git GitHub纯新手入门教程

参考视频&#xff1a;Github 新手够用指南 | 全程演示&个人找项目技巧放送_哔哩哔哩_bilibili40 分钟学会 Git | 日常开发全程大放送&个搭配GitHub_哔哩哔哩_bilibiliGit和GitHub分别是什么Git是一个运行在电脑上的版本控制软件&#xff08;保存代码各个阶段历史记录的…

在使用定时器过程中存在的那些陷阱

在使用定时器的过程中&#xff0c;如果你不了解定时器的一些细节&#xff0c;那么很有可能掉进定时器的一些陷阱里&#xff0c;函数 setTimeout 在时效性上面有很多先天的不足&#xff0c;所以对于一些时间精度要求比较高的需求&#xff0c;应该有针对性地采取一些其他的方案 …

【回眸】牛客网刷刷刷(四)软件工程(续)ZooKeeper字符串链表(专题)

前言 本篇博客为笔者刷客观笔试题时做的一些记录以供以后复习时翻阅&#xff0c;如果能够帮到您是最大的荣幸&#xff01;如果能给笔者一个三连将感激不尽&#xff01; 知识点串烧 软件工程专题&#xff08;续上篇&#xff09; 有一些可维护特性是相互促进的&#xff0c;如…

【技术美术图形部分】PBR Disney原则的BRDF 次表面散射模型

写在前面 补充去年遗漏下的知识。很多叙述都是参考了众多大佬的文章&#xff01;因为是作为个人学习总结的博客&#xff0c;所以直接卑微的借鉴过来了&#xff0c;后面会给出所有参考的文章。 另外&#xff0c;放上一个忘了在哪一篇知乎评论里的截图&#xff1a; 说的蛮好。 …

MySQL基础篇笔记

文章目录导入表的问题第3章_最基本的SELECT语句1. SQL语言的规则和规范1) 基本规则2) SQL大小写规范&#xff08;建议遵守&#xff09;3) 注释4) 命名规则2. 基本的SELECT语句1) SELECT ... FROM2) 列的别名3) 去除重复行4) 空值参与运算5) 着重号 6) 查询常数3. 显示表结构4. …