【 SpringBoot 配置⽂件 】

news2024/11/17 13:37:57

文章目录

  • 一、配置⽂件作⽤
  • 二、配置文件格式
    • 2.1 特殊说明
    • 2.2 为配置⽂件安装提示插件
  • 三、properties 配置⽂件说明
    • 3.1 properties 基本语法
    • 3.2 读取配置⽂件
    • 3.3 解决 properties 中文乱码
    • 3.4 properties 缺点分析
  • 四、yml 配置⽂件说明
    • 4.1 yml 基本语法
    • 4.2 yml 配置读取
    • 4.3 yml 使⽤进阶
      • 4.3.1 yml 配置不同数据类型及 null
      • 4.3.2 yml 配置文件中的单双引号
      • 4.3.3 配置对象
      • 4.3.4 配置集合
  • 五、properties VS yml 总结

一、配置⽂件作⽤

整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:

  1. 数据库的连接信息(包含⽤户名和密码的设置);
  2. 项⽬的启动端⼝;
  3. 第三⽅系统的调⽤秘钥等信息;
  4. ⽤于发现和定位问题的普通⽇志和异常⽇志等。

想象⼀下如果没有配置信息,那么 Spring Boot 项⽬就不能连接和操作数据库,甚⾄是不能保存可以⽤于排查问题的关键⽇志,所以配置⽂件的作⽤是⾮常重要的

二、配置文件格式

Spring Boot 配置⽂件主要分为以下两种格式

  1. .properties
  2. .ym

如下:
在这里插入图片描述

这就好像连锁店⾥⾯的统⼀服装⼀样,有两种不同的款式,properties 类型的配置⽂件就属于⽼款“服饰”,也是创建 Spring Boot 项⽬时默认的⽂件格式(主要是由于仓库⾥还有库存),⽽ yml 属于新版款式,如果⽤户了解情况直接指定要新款服饰,那么就直接发给他

2.1 特殊说明

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

2.2 为配置⽂件安装提示插件

IDEA 社区版安装 Spring Assistant 插件之后,就可以正常创建 Spring Boot 项⽬了,并且 yml 的配置⽂件就有提示了。但默认情况下是不⽀持 properties 格式的⽇志提示的,这个时候需要安装了 SpringTools 插件才会有相应的提示 如下:

在这里插入图片描述

三、properties 配置⽂件说明

properties 配置⽂件是最早期的配置⽂件格式,也是创建 Spring Boot 项⽬默认的配置⽂件

3.1 properties 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:

在这里插入图片描述

PS:⼩技巧:配置⽂件中使⽤“#”来添加注释信息


3.2 读取配置⽂件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。
@Value 注解使⽤“${}”的格式读取,如下代码所示:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class ReadYml {
    @Value("${server.port}")
    private String port;

    @PostConstruct
    public void postConstruct() {
        System.out.println("Read YML,port:" + port);
    }
}

@Component 在 Spring Boot 启动时候会注⼊到框架中,注⼊到框架中时会执⾏ @PostConstruct 初始化⽅法,这个时候就能读取到配置信息了

最终执⾏效果:

在这里插入图片描述


3.3 解决 properties 中文乱码

  1. 修改 IDEA 编码格式

在这里插入图片描述

  1. 配置新项目中文乱码

在这里插入图片描述

  1. 删除之前的 application.properties 配置文件

在这里插入图片描述

经过上述三个步骤就可以解决乱码问题了!!


3.4 properties 缺点分析

properties 配置是以 key-value 的形式配置的,如下图所示:
在这里插入图片描述

从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息,⽐如这些:
在这里插入图片描述
想要解决这个问题,就可以使⽤ yml 配置⽂件的格式化了


四、yml 配置⽂件说明

yml 是 YMAL 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔”。yml 是⼀个可读性⾼,易于理解,⽤来表达数据序列化的格式。它的语法和其他⾼级语⾔类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使⽤空⽩符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。

yml 最⼤的优势是可以跨语⾔,不⽌是 Java 中可以使⽤ golang、python 都可以使⽤ yaml 作为配置⽂件。

4.1 yml 基本语法

yml 是树形结构的配置⽂件,它的基础语法是“key: value”,注意 key 和 value 之间使⽤英⽂冒汗加空格的⽅式组成的,其中的空格不可省略 如下:

在这里插入图片描述

其中第⼀项的配置为正确的,key 也是⾼亮显示的,⽽第⼆项没有空格是错误的使⽤⽅式,第⼆项的key 也没有⾼亮显示

案例:使⽤ yml 连接数据库

spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
    username: root
    password: root

yml 和 properties 连接数据库的配置对⽐:

在这里插入图片描述

在这里插入图片描述

4.2 yml 配置读取

yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可,实现代码如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class ReadYml {
    @Value("${string.hello}")
    private String hello;

    @PostConstruct
    public void postConstruct() {
        System.out.println("Read YML,Hello:" + hello);
    }
}

运行结果为:

在这里插入图片描述

4.3 yml 使⽤进阶

4.3.1 yml 配置不同数据类型及 null

# 字符串
string.value: Hello
# 布尔值,truefalse
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null~代表null
null.value: ~

4.3.2 yml 配置文件中的单双引号

尝试在 application.yml 中配置如下信息:

在这里插入图片描述

读取程序实现代码如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class ReadYml {
    @Value("${string.str1}")
    private String str1;
    @Value("${string.str2}")
    private String str2;
    @Value("${string.str3}")
    private String str3;

    @PostConstruct
    public void postConstruct() {
        System.out.println("string.str1:" + str1);
        System.out.println("string.str2:" + str2);
        System.out.println("string.str3:" + str3);
    }
}

以上程序的执⾏结果如下图所示:

在这里插入图片描述

从上述结果可以看出:

  1. 字符串默认不⽤加上单引号或者双引号。
  2. 单引号会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据。
  3. 双引号不会转义字符串⾥⾯的特殊字符;特殊字符会作为本身想表示的意思

4.3.3 配置对象

我们还可以在 yml 中配置对象,如下配置:

在这里插入图片描述

或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):

student: {id: 1,name: Java,age: 18}

这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解 @ConfigurationProperties 来读取,具体实现如下:

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

@Data   //提供 get set toString 等方法
@Component
@ConfigurationProperties(prefix = "student")//读取配置文件中的对象
public class Student {
    private int id;
    private String name;
    private int age;
}

调⽤类的实现如下:

    //将Student对象注入
    @Autowired
    private Student student;
    
    @ResponseBody// 返回一个非静态页面的数据
    @RequestMapping("/sayhi2")
    public Student Sayhi2() {
        return student;
    }

以上程序的执⾏结果如下图所示:

在这里插入图片描述


4.3.4 配置集合

配置⽂件也可以配置 list 集合,如下所示:

# 配置 list
dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):

# 写法2
dbtypes: { name: [ mysql,sqlserver,db2 ] }

集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:

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

import java.util.List;

@Component
@Data
@ConfigurationProperties("dbtypes")//读取集合
public class ListConfig {
    private List<String> name;
}

注意: dbtypes 和 name 的名字要和配置文件中对应起来

打印类的实现如下:

    //注入集合
    @Autowired
    private ListConfig listConfig;
    
    @ResponseBody// 返回一个非静态页面的数据
    @RequestMapping("/sayhi3")
    public void Sayhi3() {
        //return listConfig;
        System.out.println(listConfig.getName());
    }

五、properties VS yml 总结

  1. properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂冒号加空格的⽅式设置,并且空格不可省略
  2. properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题
  3. yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置⽂件作为 Java 和 Go 的共同配置⽂件
  4. yml 虽然可以和 properties 共存,但⼀个项⽬中建议使⽤统⼀的配置类型⽂件

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

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

相关文章

前后端分离——SpringBoot+Vue——3天速成企业级项目

前后端分离——SpringBootVue使用到的技术&#xff1a;vue3&#xff08;区别vue2&#xff09;前言vue2 vs vue3双向绑定更新实例化生命周期获取props数据和方法的定义watchEffect那么什么是 watchEffect &#xff1f;组件通信注意attrs和listeners路由vue3路由写法&#xff1a;…

ROS学习——艰辛的环境安装之路一VMware

文章目录VMware 安装下载安装VMware 安装 一些没用的介绍&#xff1a; VMware Workstation中文版是一个“虚拟 PC”软件。它使你可以在一台机器上同时运行二个或更多 Windows、DOS、LINUX 系统。与“多启动”系统相比&#xff0c;VMWare 采用了完全不同的概念。多启动系统在一…

《Web前端应用开发》考试试卷(模拟题)

一、产品搜索页面 打开“考试文件夹”中的input.html&#xff0c;完成以下步骤&#xff1a; 注意&#xff1a;本题仅能在input.html的&#xff08;1&#xff09;为产品名称所在的div添加样式属性&#xff0c;使得产品名称保持在文本框的左边&#xff1b; &#xff08;2&#xf…

PPT NO.1【用ppt如何做一张海报+字体】

PPT做得好的人&#xff0c;一定是站在观众的角度思考的人。 1、设置幻灯片尺寸大小&#xff1a; 设置完成后如下&#xff1a; 2、加载一张自己喜欢的图片进来&#xff1a;【图片越高清越好】 将图片铺满空白的地方&#xff0c;调整好自己喜欢的区域&#xff1a; 做裁剪&#xf…

数据结构修炼第一篇:时间复杂度和空间复杂度

系列文章目录 第一章 时间复杂度和空间复杂度 第二章 顺序表&#xff0c;列表 第三章 栈和队列 第四章 二叉树 第五章 排序 目录 系列文章目录 &#x1f3c6;文章目录 &#x1f3c6;前言 &#x1f3c6;一、算法的复杂度 &#x1f3c6;二、时间复杂度的概念 大0渐进 作…

【Go语言从入门到精通系列-基础篇】Go安装 + 语言特性,以及开启你人生中的第一个go程序

系列文章 【Go语言从入门到精通系列-基础篇】Go安装 语言特性&#xff0c;以及开启你人生中的第一个go程序 【Go语言从入门到精通系列-基础篇】Go语言包的管理以及基础语法与使用。 Go语言从入门到精通系列-基础篇系列文章前言第一章 Go语言开发基础1.1 Go语言的优势1.2 Go语…

C语言快速排序非递归实现

目录 栈的辅助&#xff08;栈的实现可以调用之前实现的数据结构&#xff09;&#xff1a; 1&#xff0c;初始状态 2&#xff0c;循环 3&#xff0c;终止 4&#xff0c;注意 小点&#xff1a; 1&#xff0c;递归的使用会造成栈空间的消耗&#xff0c;使用递归&#xff0c;…

刷题day51:重新安排行程 ***

题意描述&#xff1a; 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必须从 …

【宝塔邮局管理器】使用教程、Email配置

1.安装宝塔邮局插件前&#xff0c;需要先安装redis服务&#xff0c;并设置redis密码。 安装完Redis服务后设置密码&#xff0c;设置密码时不要使用&%这类特殊符号 会导致负载状态显示异常&#xff0c;可使用英文数字组合密码 PS&#xff1a;邮局的反垃圾模块 rspamd服务需要…

Spring Cloud快速入门

文章目录Spring Cloud快速入门一、基础概念1、微服务架构2、微服务技术栈3、什么是Spring Cloud?4、Spring Cloud和Spring Boot的联系&#xff1f;5、比较成熟的互联网架构二、Rest环境搭建1、搭建提供者1.1、创建一个父工程1.2、创建一个springcloud-api模块1.3、创建一个spr…

SSM学习记录3:响应(注释方式 + SprigMVC项目 + 2022发布版本IDEA)

响应 ResponseBody注解的作用是将当前控制器中方法的返回值作为响应体 1.返回页面 无需在方法上进行ResponseBody注解&#xff0c;只需RequestMapping匹配地址&#xff0c;并且返回值为带后缀的页面名字符串 前面学习中除了json数据&#xff0c;所有带ResponseBody注解的方法…

iphone用什么蓝牙耳机好?和iphone适配的蓝牙耳机推荐

随着科技的不断发展&#xff0c;人们已经离不开各种智能设备。蓝牙耳机作为一种非常方便的音频设备&#xff0c;已经逐渐成为了许多人日常生活中不可或缺的一部分。然而&#xff0c;苹果产品的价格一直都是昂贵的&#xff0c;有没有与iphone适配的耳机呢&#xff1f;下面我们来…

ServletAPI详解(三)-HttpServletRequest

我们来看第二个类:HttpServletRequest HttpServletRequest HttpServletRequest表示的是一个http请求对象,是tomcat自动构造的,tomcat会实现监听端口,接收连接,读取请求,解析请求,构造请求对象等一系列操作 下面的方法可用在 Servlet 程序中读取 HTTP 头。这些方法通过 HttpS…

若依— — 快速入门【源码分析】

若依— — 快速入门 1 什么是若依 官网地址&#xff1a;http://www.ruoyi.vip/ 若依是一款优秀的开源项目&#xff0c;涉及到企业开发中大部分的管理系统&#xff0c;我们依此为模板进行二次开发&#xff0c;可以快速开发出符合大部分公司中的后台管理系统。 2 使用若依 使用开…

Spring Security --- authorizeRequests配置

目录 自定义配置类之访问权限 匹配顺序规则 访问控制包含 访问控制url匹配 访问控制方法 角色、权限判断 使用注解进行角色权限控制 自定义配置类之访问权限 http.authorizeRequests()主要是对url进行访问权限控制通过这个方法来实现url授权操作支持链式写法 匹配顺序…

【react全家桶学习】react简介

react是什么&#xff1f; react是用于构建用户界面的JS库&#xff0c;是一个将数据渲染为HTML视图的开源JS库 谁开发的&#xff1f; 由Facebook开发&#xff0c;且开源 为什么要学&#xff1f; 原生JavaScript操作DOM繁琐、效率低 ( DOM-API操作 UI)使用JavaScript直接操作…

Attention注意力机制

加粗样式通俗理解&#xff1a;你会注意什么&#xff1f; 对于一个模型而言&#xff08;CNN&#xff0c;LSTM&#xff09;&#xff0c;模型本身很难决定什么重要什么不重要&#xff0c;因此注意力机制诞生了。 注意力机制&#xff1a;我们会把焦点聚焦在比较重要的事务上 怎么…

详细聊一聊Android Apk的四代签名

简介 大部分开发者对apk签名还停留在APK v2&#xff0c;对APK v3和APK v4了解很少&#xff0c;而且网上大部分文章讲解的含糊不清&#xff0c;所以根据官网文档重新整理一份。 apk签名从APK v1到APK v2改动很大&#xff0c;是颠覆性的&#xff0c;而APK v3只是对APK v2的一次…

RocketMQ是是如何管理消费进度的?又是如何保证消息成功消费的?

RocketMQ消费者保障 作者: 博学谷狂野架构师GitHub&#xff1a;GitHub地址 &#xff08;有我精心准备的130本电子书PDF&#xff09; 只分享干货、不吹水&#xff0c;让我们一起加油&#xff01;&#x1f604; 消息确认机制 consumer的每个实例是靠队列分配来决定如何消费消息的…

业务异步离线任务平台思考

目录 一、离线任务平台定义 二、实际开发那种的实现方式分析 三、企业应用与链接分享 &#xff08;一&#xff09;具体企业应用举例 &#xff08;二&#xff09;离线任务平台相关文章和论文链接 四、开源代码库参考 一、离线任务平台定义 离线任务平台通常是指一种基于云…