《JavaEE进阶》----13.<Spring Boot【配置文件】>

embedded/2024/12/22 15:09:42/

本篇博客讲解

1.SpringBoot配置文件的格式以及对应的语法

2.了解两个配置文件格式的差异、优缺点。

我们这里只做简单的介绍。看会,了解,学会读取就行了。

因为配置文件实在太多了,这里只做基础的介绍。

一、配置文件的作用

前言

计算机中有许许多多的配置文件。许许多多的软件也离不开配置文件

计算机上:如

C:\Users,C:\Windows文件夹,以及各种*.config, *.xml 文件。都是配置文件

作用

1.配置文件主要是解决编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。

2.使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互。

硬编码:是将数据直接嵌入到程序或者其他可执行对象的源代码中,也就是我们常说的“代码写死”。

配置文件应用示例:

比如手机字体大小

如果采用硬编码的方式直接指定字体大小。那么所有用户使用的都是同一个字体大小。

但是不同用户有不同的偏好。我们可以把手机字体的大小放在配置文件中,当程序启动时,读取配置,以用户设置的字体大小来显示。


二、Spring Boot配置文件

Spring Boot的三种配置文件

1.application.properties

2.application.yml

3.application.yaml

  • 2和3是一样的。yml是yaml的简写。因此实际上可以认为有两个。实际开发中yml出现频率最高。当应用程序启动时,SpringBoot会自动从classpath路径找到并加载配置文件
  • .properties类型的配置文件较老老
  • .yml类型的配置文件是较新的
  • 同一个配置项在两个配置文件都存在。那么properties的优先。
  • 不同配置项在properties和yml中配置都会生效。

整体配置项取两个配置文件的并集。

SpringBoot配置文件的常用功能

  • 项目的启动端口
  • 数据库的连接信息(包含用户名和密码的设置)
  • 第三方系统的调用密钥等信息
  • 用于发现和定位问题的普通日志和异常日志等

在之前我们写的项目中就用到了端口号的定义和数据库的连接信息。

Spring Boot在创建项目时就已经帮我们创建了配置文件

java">application.properties//文件

三、properties类型配置文件 

properties配置文件是最早期的配置文件格式,也是创建SpringBoot项目默认的配置文件

3.1基本语法

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

例如:

配置项目端口号

java">#配置项目端口号
server.port=1208

配置数据库连接信息

java">#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/qyyDatabase?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=root

ps:配置文件中用 # 来添加注释信息

3.2读取配置文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用

@Value来实现。@Value注解使用“${ }”的格式读取。

若只加了" "那么会读取" "中的作为内容来返回。

示例:

properties配置如下:

java">mykey.kuy1 = qyy

 编辑java代码来读取配置文件

@Value读取

java">@RestController
public class PropertiesController {@Value("${mykey.key1}")private String key1;@RequestMapping("/key")public String key(){return "读取到值:"+key1;}
}

运行结果: 

3.3properties缺点分析

properties配置⽂件中会有很多的冗余的信息,

如这些:

而yml类型的配置文件就没有这些。

四、yml类型配置文件

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

4.1yml基本语法

yml 是树形结构的配置文件,它的基础语法是"key: value".

注:

:后面一定要有空格。空格不可省略。

示例:

使用tml配置端口号

java">server:port: 1208

使用yml连接数据库

java">spring:datasource:url: jdbc:mysql://127.0.0.0:3306/qyy_database?characterEncoding=utf8&useSSL=falseusername: rootpassword: 12345678

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

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

使用字符串如何表示null呢?

什么都不加就行了。或者加" " / ' '代表空字符串。  

4.3yml配置字符串读取

与properties类似。

yml配置如下:

@Value注解读取

java">string:hello: qyy
java">@RestController
public class PropertiesController {@Value("${string.hello}")private String key1;@RequestMapping("/key")public String key(){return "读取到值:"+key1;}
}

注意事项:value值加单双引号

字符串默认不用加单引号或者双引号,如果加英文的单引号可以表示特殊的含义。

如在application.yml配置如下信息。

java">string:hello: qyystr1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."

读取程序实现代码如下:

java">    @Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;@RequestMapping("/yml")public String readYml(){System.out.println(str1);System.out.println(str2);System.out.println(str3);return "yml";}

运行结果:

java">Hello \n Spring Boot.
Hello \n Spring Boot.
Hello Spring Boot.

结果发现

  • 字符串默认不用加单引号或双引号
  • 单引号中,和不加引号中的转义字符不会生效
  • 双引号中的转义字符会生效

4.4yml配置对象

我们还可以在yml中配置对象

配置示例如下:有两种写法。

一种是换行分开写,还有一种是行内写法(他们写法作用一致)

java">student1:id: 1name: javaage: 17student2: {id: 1,name: java,age: 18}

如何读取配置中的对象呢?

此时要使用别的注解

@ConfigurationProperties+@Component注解读取

注意还要配合

用这个注解来读取对象。

java">@ConfigurationProperties(prefix = "student1")
@Component
@Data
public class StudentInfo {private int id;private String name;private int age;}

打印对象

java">    /*** yml配置读取对象*/@Autowiredprivate StudentInfo student;@RequestMapping("/student")public String readStudent(){System.out.println(student.toString());return student.toString();}

 运行结果:

java">StudentInfo(id=1, name=java, age=17)

4.5yml配置集合

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

java">#配置集合
dbtypes:name:- mysql- sqlserver- db2

- 后面的空格不可省略,虽然不会报错,但是含义变了。如果空格省略这几个元素会当做一个元素来处理。

集合的读取和对象一样,也是用这个注解

@ConfigurationProperties+@Component注解读取

java">@Component
@ConfigurationProperties("listtypes")
@Data
public class ListInfo {private List<String> name;
}

运行结果:

4.6yml配置Map

配置文件也可以配置map,配置代码如下:

可以换行写,也可以使用行内写法

java">maptype1:map:k1: kk1k2: kk2k3: kk3maptype2: {map: {k1: kk1,k2: kk2,k3: kk3}}

读取代码如下:

java">@Component
@ConfigurationProperties("maptype2")
@Data
public class MapConfig {private HashMap<String,String> map;
}

打印代码如下:

java">    @Autowiredprivate MapConfig mapConfig;@RequestMapping("/readMap")public String readMap(){return mapConfig.toString();}

运行结果:

4.7yml的优缺点

优点:

1.可读性高,写法简单,易于理解

2.支持更多的数据类型,可以简单表达对象、数组、List、Map等数据类型

3.支持更多的编程语言,不止是java中可以使用,在Golang、python、Ruby、JavaScript中也可以使用

缺点:

1.不适合写复杂的配置文件

如:properties格式配置如下:

转换为yml

java">keycloak:realm: demoresource: fm-cache-cloudcredentials:secret: d4589683-Oce7-4982-bcd3security:- authRoles:- usercollections:- name: ssologinurlpatterns:- /login/*

转换过程比较花费精力,如果配置更复杂一点,可读性会更差,代码也会更难写

2. 对格式有较强的要求(⼀个空格可能会引起一场血案)

五、综合性练习

下篇预告:

验证码案例:我们会在下一篇博客中单独讲解验证码案例哦。


http://www.ppmy.cn/embedded/109344.html

相关文章

UniApp开发微信小程序前期准备工作(涵盖了从项目构思到准备开发阶段的主要步骤和角色分配,以及可能涉及的一些费用)

为了帮助技术小白更好地理解如何开始使用UniApp开发小程序&#xff0c;下面是一份简化版的指南&#xff0c;它涵盖了从项目构思到准备开发阶段的主要步骤和角色分配&#xff0c;以及可能涉及的一些费用。 1. 了解UniApp 首先&#xff0c;你需要对UniApp有一个基本的了解。Uni…

【Python 千题 —— 算法篇】无重复字符最长子段

Python 千题持续更新中 …… 脑图地址 &#x1f449;&#xff1a;⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在编程过程中&#xff0c;处理字符串的任务时常遇到&#xff0c;其中一个经典问题是查找无重复字符的最长子串。这在很多应用场景中…

[Linux] Linux如何管理进程

标题&#xff1a;[Linux] Linux如何管理进程 水墨不写bug 目录 一、如何理解管理 二、如何进行管理&#xff08;先描述&#xff0c;后管理&#xff09; 三、进程的概念 正文开始&#xff1a; 在《Linux操作系统入门详解》中&#xff0c;我们了解到了操作系统的定位…

交友系统“陌陌”全方位解析

交友系统在现代社会中扮演着越来越重要的角色&#xff0c;尤其是随着互联网技术的发展&#xff0c;各种交友软件层出不穷。陌陌作为其中的佼佼者&#xff0c;其全方位解析对于理解交友系统的商业开发至关重要。 陌陌的核心功能是提供基于地理位置的社交服务&#xff0c;用户可…

模拟网络丢包常用方法以及工具

文章目录 背景常用方法代码实现使用方法测试代码 使用网络流量控制工具 常用工具Clumsy 背景 在软件开发过程中&#xff0c;经常需要模拟不同的网络环境来测试应用在不同条件下的表现。 这些模拟可以采用多种方式进行&#xff0c;包括在代码中实现随机丢包、随机延时、乱序&am…

transforemr网络理解

1.transformer网络中数据的流动过程&#xff1a; 2.transformer中残差的理解&#xff1a; 残差连接&#xff08;Residual Connection&#xff09; 的核心思想就是通过将输入与经过变化的输出相加&#xff0c;来最大限度地保留原始信息。 transforemr中注意力层网络和前馈神经…

VOCs将纳入征税,LDAR系统的排放量计算准确度将要求更加规范,VOCs排放量计算准确度会更加重视,直接影响到税费

笔者见过很多不同公司的LDAR管理系统以及和很多检测公司技术人员沟通&#xff0c;部分技术人员在排放量计算方面尽然不知道中间点等关键要素&#xff0c;有的系统计算排放量不考虑中间点算法、有的计算一年四轮次检测 每轮都是独立计算和上轮检测数据没有任何关系&#xff08;这…

CMake_CMD_02_add_custom_command() 是什么功能?

在 CMake 中&#xff0c;add_custom_command() 函数用于定义一个自定义命令&#xff0c;以便在构建过程中执行特定的操作。这个命令通常与文件的生成、处理或更新相关联&#xff0c;可以指定在构建过程中的任何阶段执行。 功能 生成文件: add_custom_command() 通常用于生成源…