7. Spring Boot 配置文件

目录

1. 配置文件作用

2. 配置文件格式

3. properties 配置文件说明

3.1 properties 基本语法

3.2 读取配置文件

3.3 缺点

4. yml 配置文件说明

4.1 properties 基本语法

4.2 读取配置文件

4.3 yml 配置不同的数据类型

布尔值

整数值

 null 值

配置对象

 配置集合

配置 Map

Banner 

多平台的文件配置

4.4 优点

5 properties VS yml


1. 配置文件作用

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

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

如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。

2. 配置文件格式

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

  • .properties
  • .yml

properties 类型的配置文件属于“旧款”,是创建 Spring Boot 项目时默认的文件格式;而 yml 属于新版款式,如果用户需要新款则使用新款。

1. 理论上讲 properties 可以和 yml ⼀起存在于⼀个项目当中,当 properties 和 yml ⼀起存在于⼀个项目中时,如果配置文件中出现了同样的配置,比如 properties 和 yml 中都配置了“server.port”, 那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息。

2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。

3. properties 配置文件说明

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

配置文件包括:

  • Spring 的配置
  • 自定义配置

3.1 properties 基本语法

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

# 配置项目端口号
server.port=9090
# 数据库配置信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root# 自定义配置
mykey.key1=aaa

key (= 前面)只要是字符串就可以。 但是规范为:全部小写,单词之间使用 . 分割

一般来说,类名:首字母大写(大驼峰)

变量名:首字母小写(小驼峰)

常量:全大写,单词之间使用_分割

3.2 读取配置文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。

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

@RestController
public class ValueController {@Value("${mykey.key1}")private String key1;@PostConstructpublic void postConstruct(){System.out.println("===========================");System.out.println("key:" + key1);}public String hi(){return "hi~ ValueController...";}
}

我们通过 @Value 获取自定义的配置文件中的值。

如果我们去掉 ${},那么可以看到最终结果直接将双引号里面的值赋值给了 key1 变量:

@RestController 在Spring Boot 启动时会注入到框架中,注入到框架中时会执行 @PostConstruct 初始化方法,此时就能读取到配置信息了。 

3.3 缺点

properties 配置是以 key-value 的形式配置的,因此配置文件中会有很多的冗余的信息

4. yml 配置文件说明

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

4.1 properties 基本语法

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

server:port: 8080

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8username: rootpassword: root

4.2 读取配置文件

同样通过@Value 注解使用“${}”的格式读取:

@RestController
public class ValueController {@Value("${spring.datasource.username}")private String sqlusername;@PostConstructpublic void postConstruct(){System.out.println("===========================");System.out.println("sqlusername:"+sqlusername);}public String hi(){return "hi~ ValueController...";}
}

4.3 yml 配置不同的数据类型

布尔值
mykey:key1: true

整数值
mykey:key1: 10

 null 值
mykey:key1: ~

 对于单引号和双引号的区别:

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

配置对象
Student:id: 1name: dannyage: 18
public class Student {private Integer id;private String name;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

我们可以看到直接写上面一个类非常麻烦,需要加入 get 和 set 方法,因此,我们可以通过添加注解 @Data 来帮助我们直接写 get 和 set 方法,以及 toString 方法,还有一些构造函数。 

@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {private Integer id;private String name;private Integer age;
}

通过五大注解接收对象,将对象存放至 Spring 中,此处使用 @Component 注解;

通过 @ConfigurationProperties(prefix = "student") 将 yml 文件中的 Student 赋值给这个对象(“prefix =”可以省略),此处的 student 首字母要小写。

@RestController
public class ValueController {@Autowiredprivate Student student;@PostConstructpublic void postConstruct(){System.out.println("===========================");System.out.println(student);System.out.println("===========================");}public String hi(){return "hi~ ValueController...";}
}

 配置集合
Student:id: 1name: dannyage: 18dbtypes:- mysql- sqlserver- db2
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {private Integer id;private String name;private Integer age;private List<String> dbtypes;
}

配置 Map
Student:id: 1name: dannyage: 18dbtypes:- mysql- sqlserver- db2map2:k1: kk1k2: kk2k3: kk3
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {private Integer id;private String name;private Integer age;private List<String> dbtypes;private Map<String,String> map2;
}

Banner 

我们可以通过在线工具直接生成 banner:Spring Boot banner在线生成工具,制作下载英文banner.txt,修改替换banner.txt文字实现自定义,个性化启动banner-bootschool.netSpring Boot banner工具实现在线生成banner,轻松修改替换实现自定义banner,让banner.txt文件内容更有趣,是很棒的Spring Boot banner自定义和命令行ascii文字工具,还可以生成linux、MAC各系统命令行终端ascii文字,有了它你的项目会变得有意思。https://www.bootschool.net/ascii

我们选择下载文件,将下载好的文件命名为 banner.txt 粘贴在 idea 的 resource 文件夹下:

重新运行程序,可以看到此时生成的是我们刚刚设置的文件:

多平台的文件配置

实际工作中的开发环境分为开发环境(自测)、测试环境(测试人员进行测试,测试环境的数据都是测试人员/开发人员造的数据,是假数据)、预发布环境和发布环境(通常数据是一样的,都是线上真实的用户数据)。

我们希望在不同的配置环境中执行不同的配置文件,因此将主文件中的配置注释,并进行设置: 

@RestController
public class ValueController {@Value("${spring.datasource.username}")private String sqlusername;@Value("${spring.datasource.password}")private String password;@Autowiredprivate Student student;@PostConstructpublic void postConstruct(){System.out.println("===========================");System.out.println("sqlusername:"+sqlusername);System.out.println("password:"+password);System.out.println("===========================");}public String hi(){return "hi~ ValueController...";}
}

设置为 test 环境下: 

设置为 prod 环境下: 

综上,多平台文件配置的步骤可以总结如下: 

  1. 先写各个环境的配置文件:application-xxx.yml
  2. 在主配置文件 application.yml 中设置环境参数

4.4 优点

yml 的优点:

  1. yml 可读性高,写法简单、易于理解,它的语法和 JSON 语言类似。
  2. yml 支持更多的数据类型,它可以简单表达清单 (数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
  3. yml 支持更多的编程语言,它不止是 Java 中可以使用,在 Golang、PHP、Python、Ruby、JavaScript、Perl 中同样可以使用。

5 properties VS yml

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

当我们关闭再打开 idea,可以看到 .properties 文件出现了乱码:

因为它的格式为:

而 .yml 文件的格式为:

因此需要修改 .properties 文件的格式:

之后再打开 .properties 文件不会再出现乱码。

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

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

相关文章

SpringBoot集成kafka全面实战

本文是SpringBootKafka的实战讲解&#xff0c;如果对kafka的架构原理还不了解的读者&#xff0c;建议先看一下《大白话kafka架构原理》、《秒懂kafka HA&#xff08;高可用&#xff09;》两篇文章。 一、生产者实践 普通生产者 带回调的生产者 自定义分区器 kafka事务提交…

第三大的数

414、第三大的数 class Solution {public int thirdMax(int[] nums) {Arrays.sort(nums);int tempnums[0];int ansnums[0];int count 0;// if(nums.length<3){// return nums[nums.length-1];// }// else {for(int inums.length-1;i>0;i--){if (nums[i]>nums[i…

安防监控视频汇聚平台EasyCVR修改录像计划等待时间较长是什么原因?

安防监控视频EasyCVR视频融合汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检…

UI设计工具都有哪些好用的推荐?

对于UI设计的初学者来说&#xff0c;掌握一个实用且易于使用的界面UI软件是非常重要的。今天&#xff0c;我整理了四个易于使用的界面UI软件。让我们看看。 即时设计 即时设计是一款免费的在线 UI 设计工具&#xff0c;无系统限制&#xff0c;浏览器打开即可使用&#xff0c;…

如何使用 After Effects 导出摄像机跟踪数据到 3ds Max

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 在本教程中&#xff0c;我将展示如何在After Effects中跟踪实景场景&#xff0c;然后将相机数据导出到3ds Max。 1. 项目设置 步骤 1 打开“后效”。 打开后效果 步骤 2 转到合成>新合成以创建新合…

Python - Opencv应用实例之树叶自动分割、标签及统计分析系统

Python - Opencv应用实例之树叶自动分割、标签及统计分析系统 本文通过Python+opencv 实现这样的需求:输出位置和角度(x, y, r),并标记出轮廓基于传统图像处理算法实现,算法原理:输入图像 -> 灰度化 -> 二值化 -> 形态学处理 -> 轮廓提取 -> 树叶中心定位 -…

window10脚本转服务教程

先说下脚本/我们启动的一些三方服务转window本机服务目前我了解到的好处 一键设置开机自启、随用随启、延时自启解决一些服务类应用启动后会阻塞当前dos窗口导致桌面一直要开着的问题脚本化服务注册&#xff0c;方便管理&#xff0c;统一运维… 1. 实践涉及内容介绍 编写好的…

YOLOV8最强操作教程.

YoloV8详细训练教程. 相信各位都知道yolov8发布了&#xff0c;也是U神大作&#xff0c;而且V8还会出论文喔&#xff01; 2023.1.17 更新 yolov8-grad-cam热力图可视化链接 2023.1.20 更新 YOLOV8改进-添加EIoU,SIoU,AlphaIoU,FocalEIoU 链接 2023.1.30 更新 如果你需要修改或者…

最新Ai创作源码ChatGPT商用运营源码/支持GPT4.0+支持ai绘画+支持Mind思维导图生成

本系统使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到本系统&#xff01; 支持GPT3模型、GPT4模型Midjourney专业绘画&#xff08;全自定义调参&#xff09;、Midjourney以图生图、Dall-E2绘画Mind思维导图生成应用工作台&#xff08;Prompt&#xff09;AI绘画广场自定…

基于Spring包扫描工具和MybatisPlus逆向工程组件的数据表自动同步机制

公司产品产出的项目较多。同步数据库表结构工作很麻烦。一个alter语句要跑到N个客户机上执行脚本。超级费时麻烦。介于此&#xff0c;原有方案是把增量脚本放到一resource包下&#xff0c;项目启动时执行逐行执行一次。但由于模块开发人员较多&#xff0c;总有那么一两个机灵鬼…

高电压放大器ATA-2021B技术指标

随着ATA-2021H高压放大器的升级改版&#xff0c;新品ATA-2021B高电压放大器走进了更多工程师、研究人员的视野。相比于升级之前&#xff0c;ATA-2021B高压放大器拥有了更多更好地优势&#xff0c;可以更好地的帮助研究人员高效完成测试项目。今天Aigtek小编就带大家了解一下关于…

windos 服务器设置指定ip访问指定端口,其他ip不能访问

需求&#xff1a;设置指定ip访问指定端口&#xff0c;其他ip不能访问 一&#xff0c;禁止所有ip访问 需要打开IP安全策略 或者winR 输入secpol.msc 1.先创建一个ip安全策略 2.点击添加&#xff0c;不使用添加向导&#xff0c;建一个安全策略 继续点添加 二&#xff0c;放开需…

苍穹外卖 Spring Task 来单提醒 催单Apache ECharts day10~11

苍穹外卖-day10 课程内容 Spring Task订单状态定时处理WebSocket来单提醒客户催单 功能实现&#xff1a;订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a; 来单提醒&#xff1a; 客户催单&#xff1a; 1. Spring Task 1.1 介绍 Spring Task 是Spring框架提供…

【chatGpt】关于websocket连接中对未授权的捕捉问题

目录 问题 有效提问 有效的细节提问 问题 一路上&#xff0c;通过简单的error进行判断弹出授权&#xff0c;会有很多乱弹的现象&#xff1a; &#xff08;1&#xff09;链路正常切换会断 &#xff08;2&#xff09;服务器没有启动会连接不上 &#xff08;3&#xff09;没…

Python pygame(GUI编程)模块最完整教程(7)

上一篇文章&#xff1a; Python pygame(GUI编程)模块最完整教程&#xff08;6&#xff09;_Python-ZZY的博客-CSDN博客 总目录&#xff1a; README.md Python-ZZY/Python-Pygame最完整教程 - Gitee.com 21 OpenGL与Pygame 不会OpenGL的读者可以跳过本章节。 21.1 OpenGL简…

CRM系统化整合从N-1做减法实践 | 京东物流技术团队

1 背景 京销易系统已经接入大网、KA以及云仓三个条线商机&#xff0c;每个条线商机规则差异比较大&#xff0c;当前现状是独立实现三套系统分别做支撑。 2 目标 2022年下半年CRM目标是完成9个新条线业务接入&#xff0c;完成销售过程线上化&#xff0c;实现销售规则统一。 …

js版计算比亚迪行驶里程连续12个月计算不超3万公里改进版带echar

<!DOCTYPE html> <html lang"zh-CN" style"height: 100%"> <head> <meta charset"utf-8" /> <title>连续12个月不超3万公里计算LIGUANGHUA</title> <style> .clocks { …

计算机组成原理问答5

CPU CPU两大核心部件&#xff1a;运算器控制器 运算器的核心&#xff1a;ALU&#xff08;算数逻辑单元&#xff09;&#xff0c;功能&#xff1a;对数据进行加工。基本结构&#xff1a;ALU、暂存寄存器、通用寄存器组、累加寄存器ACC、程序状态寄存器PSW、移位器、计数器。 …

第一次编程测试(分频器)

一&#xff0c;分频器 定义 分频器&#xff08;Divider&#xff09;是一种电子电路或设备&#xff0c;用于将输入信号的频率降低到较低的频率。它常用于数字系统、通信系统和计时应用中。原理 整数分频器使用计数器来实现频率的降低。计数器根据输入信号的边沿触发进行计数&am…

Mybatis学习笔记教程

Mybatis-9.28 环境&#xff1a; JDK1.8Mysql 5.7maven 3.6.1IDEA 回顾&#xff1a; JDBCMysqlJava基础MavenJunit SSM框架&#xff1a;配置文件的。 最好的方式&#xff1a;看官网文档&#xff1b; 1、简介 1.1、什么是Mybatis MyBatis 是一款优秀的持久层框架它支持定制…