Spring Boot 配置文件

news/2024/11/23 9:11:36/

文章目录

    • 1.配置文件作用
    • 2.配置文件的格式
    • 3.properties 配置文件
      • 3.1 properties 基本语法
      • 3.2 读取配置文件
      • 3.3 properties 优缺点分析
    • 4. yml 配置文件的说明
      • 4.1 yml 基本语法
      • 4.2 yml 进阶配置
        • 1) 配置不同的数据类型
        • 2) 配置对象
    • 5. propertise VS yml
    • 6.设置不同的配置环境
      • 6.1 创建不同环境的配置文件
      • 6.2 在 yml 中设置运行环境

1.配置文件作用

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

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

由此可以发现 , 如果没有配置文件 , Spring Boot 项目就不能连接和操作数据库 , 甚至不能保存用于查询问题的关键日志.

2.配置文件的格式

Spring Boot 配置文件的主要分为以下两种格式:

  • properties

  • .yml

.ymlproperties 是两个时代的产物 , .yml 属于新时代的产物 , 创建 Spring Boot 时的配置文件默认格式是 properties , 如果用户指定要使用 .yml 就直接发给他.

Tips:

  1. 从功能上来讲 , 两个配置文件可以共存 , 但企业中通常会规定使用某一种格式的配置文件.(避免相同配置项被覆盖)
  2. 如果连个配置文件中有相同的配置项 , 以 properties 中的配置项优先.

3.properties 配置文件

properties 是旧时代的配置文件格式 , 也是 Spring Boot 默认的配置项.

3.1 properties 基本语法

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

#配置端口号
server.port=9090
#配置数据库连接
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncodeing=utf8
spring.datasource.username=root
spring.datasource.password=******
#用户自定义配置文件
username="zhangsan"

可以看到端口号已经被改了

image-20230419194020329

Tips: 配置文件中以 # 来添加注释信息

3.2 读取配置文件

在项目中可以使用 @Value 可以主动读取配置文件中的内容.

@Value 注解使用 “${}” 的格式读取 , 代码如下:

@Controller//当前类加载到 spring 容器中
@ResponseBody
public class testController {@Value("${username}")//Tips: 一定是 ${key}格式private String myconfigration;//注册一个路由@RequestMapping("/sayHi") // = @WebServlet("/url")public String sayHi(){return "Hello world!" + "->" + myconfigration;}
}

运行结果:

Tips: @Value 和 @Autowried 执行方式很像 , 都是通过注入的方式.

3.3 properties 优缺点分析

properties 优点:

  1. 系统默认的配置文件
  2. properties 配置项的优先级比 yml 高
  3. 格式简单 , 不易出错.

properties 缺点:

  • 写法过于冗余
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncodeing=utf8
spring.datasource.username=root
spring.datasource.password=******

properties 有重复写很多的包名 , 而 yml 相同包名只需要写一次.

4. yml 配置文件的说明

yml 是 YAML 是缩写 , 它的全称 Yet Another Markup Language (另一种标记语言)

yml 优点分析:

  • 可读性好:YAML使用缩进和空格来表示层次结构,使得数据结构更加清晰明了,易于阅读和理解。
  • 可扩展性好:YAML支持自定义标签和类型,可以根据需要扩展出符合自己需求的数据类型,比如日期、时间、正则表达式等。
  • 可移植性好:YAML是一种跨平台的数据序列化格式,可以在不同的编程语言和操作系统之间进行数据交换和传输。
  • 可互操作性好:YAML与其他数据格式之间的转换非常容易,比如可以将YAML转换为JSON、XML等格式。

综上所述,YAML的通用性更强,可以满足不同场景下的数据序列化和交换需求,因此被广泛应用于配置文件、数据传输、API文档等领域。

4.1 yml 基本语法

yml 是树形结构的配置文件 , 基本语法是"key: value"(注意冒号后的空格不可省略)

#正确格式
string: mysql
#错误格式
string2:jdbc

可以看到 , 正确格式有高亮!

使用 yml 连接数据库

代码示例;

spring:datasource:url: 127.0.0.1:3306/dbname?character-Encoding=utf8username: rootpassword: root

使用 properties 连接数据库:

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncodeing=utf8
spring.datasource.username=root
spring.datasource.password=******

明显 yml 要简洁不少.

4.2 yml 进阶配置

1) 配置不同的数据类型

# 字符串
string.value: Hello
# 布尔值,true或false
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: ~

Tips: 字符串默认不加单 / 双引号 , 如果加了会有不同含义.

string: str1: hello \n spring bootstr2: 'hello \n spring boot'str3: "hello \n spring boot"
    @Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;//    初始化方法@PostConstructpublic void doPostConstruct(){System.out.println(str1);System.out.println(str2);System.out.println(str3);}

运行结果如下:

image-20230419223627360

双引号不会转义特殊字符的含义 , 特殊字符会表达本身的意思

2) 配置对象

student:id: 1name: 张三age: 18#或者是行内写法
student: {id: 1,name: 张三,age: 18}

@Value() 只能读取配置中的属性 , 而读取对象需要使用 @ConfigurationProperties()

具体实现如下:

@ConfigurationProperties("student")
@Component
@Setter
@Getter
@ToString
public class StudentComponent {private int id;private String name;private int age;
}

Tips: Getter 和 Setter 不能省略 , 此处使用 lombok 插件用注解替代.

调用类的实现如下:

    @Autowiredprivate StudentComponent studentComponent;//    初始化方法@PostConstructpublic void doPostConstruct(){System.out.println(studentComponent);}

执行结果如下:

image-20230419224237539

yml 还可以配置集合类等 , 更多配置项可以访问 Spring Boot 官网

Spring Boot 配置项


5. propertise VS yml

  • properties 是键值对形式的配置文件 , 而 yml 是类似于 json 格式的树形配置文件.
  • properties 为默认的配置文件 , 但其配置存在一定的数据冗余 , 使用 yml 可以很好的解决数据冗余问题.
  • yml 通用性更好 , 支持更多语言 , 如 java, Go, Python 等 , 如果使用云服务器开发 , 可以使用一份配置文件作为 java 和 go 的共同配置文件.
  • yml 支持更多的数据类型

6.设置不同的配置环境

6.1 创建不同环境的配置文件

通常配置文件可以分为 公用, 开发, 测试, 生产.

假设产品有一个需求:

  • 开发环境端口号: 6666
  • 测试环境端口号: 7777
  • 生产环境端口号: 8888

6.2 在 yml 中设置运行环境

spring:profiles:active: dev

将运行环境设置为开发环境

#服务器端口号
serve:port: 9090
#数据库 url
spring:datasource:url: jdbc:mysql//127.0.0.1:3306/testdb?characterEncodeing=utf8
#数据库用户名
spring:datasource:username: root
#数据库密码
spring:datasource:password: *****
#开启调试日志(enable debug logs)
debug: true
#开启跟踪日志(enable trace logs)
trace: true

http://www.ppmy.cn/news/82672.html

相关文章

oracle:NLSSORT函数简介及使用方法

oracle:NLSSORT函数简介及使用方法 在Oracle数据库中,NLSSORT函数是一个用于排序和比较非英语字符的重要函数。本文将对NLSSORT函数进行简要概述,并介绍其使用方法。 什么是NLSSORT函数? NLSSORT函数是Oracle数据库中的一个函数…

【STC8】热启动串口指令下载

前言 在目标开发板没有装载自动下载电路的时候,往往需要冷启动,也就是需要手动开关电源,来达到单片机复位下载。当然还有一种方法是热启动,通过串口接收到自定义的指令后,软件执行复位下载。这就是本文介绍的内容。 材…

Flutter 局部刷新

flutter的局部刷新的几种方式 第一种 &#xff1a;使用 GlobalKey 父组件中声明 GlobalKey<_局部刷新对象类型State> textKey GlobalKey(); textKey.currentState.局部刷新的方法(); 第二种 使用&#xff1a;StatefulBuilder 第三种 使用 StreamBuilder Stream…

【Leetcode】697. 数组的度

[哈希表] Given a non-empty array of non-negative integers nums, the degree of this array is defined as the maximum frequency of any one of its elements. Your task is to find the smallest possible length of a (contiguous) subarray of nums, that has the sa…

python 3的urllib库介绍

Python 3中的urllib模块可以用来处理URL&#xff0c;包括下载和上传文件、创建和读取cookie、访问Web API等。在本文中&#xff0c;我们将详细介绍urllib库中最常用的四个模块&#xff1a;urllib.request、urllib.parse、urllib.error和urllib.robotparser。 一、urllib.reque…

【C++学习第九讲】C++ 整型介绍

文章目录 一、理论1.1 总述1.2 char类型1.3 short类型1.4 int类型1.5 long类型1.6 long long类型 二、代码示例三、细节问题3.1 查看每个整型的位数3.2 sizeof 函数3.3 limits 头文件 一、理论 1.1 总述 在 C 中&#xff0c;整型&#xff08;Integer&#xff09;是一种基本的…

自动驾驶行业迎来大规模发展,“高精度定位”重要性凸显

5月16日&#xff0c;2023 中国 (亦庄) 智能网联汽车科技周暨第十届国际智能网联汽车技术年会在北京隆重召开。工信部装备工业一司一级巡视员苗长兴在在会上表示&#xff1a;2022 年我国搭载辅助自动驾驶系统的智能网联乘用车新车销售量达 700 万辆&#xff0c;同比增长45.6%&am…

Kubernetes1.22.0 部署 metricis-service

概述 Install cfssl cat > proxy-client-csr.json<<EOF {"CN": "aggregator","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN",&quo…