Spring Boot配置文件

news2024/11/28 2:41:19

日升时奋斗,日落时自省 

目录

1、配置文件作用

2、配置文件格式

2.1、使用注意

3、properties配置文件

3.1、注释中文问题

3.2、properties语法格式

3.3、读取配置文件

3.3.1、Value读取

3.3.2、PropertySource读取

3.3.3、原生方式读取配置文件

3.4、properties缺点分析

4、yml配置文件

4.1、优点分析

4.2、yml语法格式

4.2.1、设置不同数据类型

4.2.2、yml配置读取

4.2.3、配置对象

4.2.4、配置集合

 5、properties和yml区别


1、配置文件作用

配置文件是一种存储应用程序配置信息的文件,通常采用纯文本格式

<1>存储应用程序的配置参数:在软件开发过程中,很多参数需要在运行时进行调整,例如数据库连接、日志级别等。通过配置文件,可以将这些参数组织起来并进行统一管理

<2>方便程序的部署:在程序部署时,需要根据不同的环境进行不同的配置,例如开发环境、测试环境和生产环境等。通过配置文件,可以轻松地进行环境切换,从而方便程序的部署和管理

2、配置文件格式

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

.properties (比较老的格式)

.yml(也能写作.yaml 都算是新版格式)

两者都是可以出现在一个目录下使用的(使用就是同时存在而且还能跑)

类似于纸币,旧纸币和新纸币,.properties 后缀的配置文件 就类似于“旧纸币”,.yml类似于“新纸币”但是效果都是一样的100元,不能当50元用嘛,还是原来的价值(都可以使用,也可以并存)

2.1、使用注意

<1>虽然.properties文件和.yml文件是可以在同一个项目中,但是这样也会有所影响,.properties文件的优先级还是比较高的,.properties配置文件会先进行加载,.yml配置文件也加载但是需要在.properties配置文件之后

<2>尽可能的使用一种格式的配置文件,便于维护(降低故障可能性),推荐在刚刚开始学习SpringBoot的时候使用.properties配置文件

3、properties配置文件

properties配置文件是早期文件格式,也是默认格式,在创建Spring Boot项目时,会直接创建好

3.1、注释中文问题

有的友友肯定会遇到注释中文乱码 

 在配置文件中输入 中文注释,当关闭idea再次打开时就会出现乱码

不如提前解决这个问题,以免后面遇到了临时处理很慌乱(提前预判)(修改两个地方)

<1>当前项目修改字符集

<2>修改新项目的字符集

最后操作:就是把本项目刚刚加载的properties配置文件给删了,自己从新创建一个,就也是utf-8字符集 

3.2、properties语法格式

properties是键值对的形式配置的,键值连接方式是 “= ”连接的

这里演示几个给友友们看,这里推荐友友们下载一个插件(这是社区版的插件,可以支持配置文件的快捷提示,方面我们输入)

File -> Settings -> plugins

 安装完成后,idea重启 就可以了

# 首次使用properties配置文件
#配置文件中 设置端口号
server.port=8080
#设置数据库连接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/class?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root

#也可以自定义 设置键值对

javaclass=myclass

3.3、读取配置文件

配置不仅仅可以设置连接,端口号等固定操作,还可以设置自定义,在项目中会有主动读取配置文件内容情况,这里就涉及到了一个新的注解@Value来实现

3.3.1、Value读取

使用操作:@Value("${key}")   这里的key就是键

就以上面的配置文件为例,我们拿一下 端口号 和 自定义设置的键值对

@RestController   //相当于  @Controller注解 和 @ResponseBody注解
@RequestMapping("/test")         //设置路由
public class TestController {

    @Value("${server.port}")
    public String port;

    @Value("${javaclass}")
    public String mystr1;

    @RequestMapping("/port")   //设置二级路由
    public void sayhi(){
        System.out.println("从配置文件中拿出的端口号:"+port);
        System.out.println("自定义配置文件键值对取值:"+mystr1);
    }
}

类写完之后,开始启动Maven ,此时启动控制台并不会打印什么,需要访问这里写的myport路由

控制台才会显示打印结果

运行结果: 都是我们刚刚配置文件中设置的

3.3.2、PropertySource读取

@PropertySource注解读取方法只能读取properties配置文件

下面就来演示@PropertySource注解的读取操作,这里是指定读取哪个properties配置文件

使用一个类来演示

//组合注解
@RestController
//该注解 指定读取的配置文件 如果出现乱码问题也可以设置字符集
@PropertySource(value = "application.properties",encoding = "utf8")
//设置路由地址
@RequestMapping("/proper")
public class ProperController {
    @Value("${server.port}")
    private String port;

    @Value("${spring.datasource.url}")
    private String url;
    @RequestMapping("sayhi")
    public void sayhi(){
        System.out.println("指定配置文件获取端口:"+port);
        System.out.println("指定配置文件获取连接:"+url);
    }
}

 剩下部分就交给启动了,启动后需要访问路由才能看见打印结果

运行结果:(友友们也可以从新创建一个properties配置文件进行操作,两个配置文件中设置不同的端口号,想要加载那个就给注解中添加那个配置文件)

注:该注解只能支持properties为后缀的配置文件 

3.3.3、原生方式读取配置文件

原生的读取配置文件的方式是使用 Properties 类,该类只支持以 .properties 为后缀的属性文件,不支持读取 YAML 格式的配置文件

@RestController
@RequestMapping("/native")
public class NativeController {
    @RequestMapping("/sayhi")
    public void sayhi() throws IOException {
        //创建properties对象 
        Properties properties=new Properties();
        //获取配置文件中的字节   同时设置字符集
        InputStreamReader inputStreamReader=new InputStreamReader(
                this.getClass().getClassLoader().getResourceAsStream("application.properties"),
                StandardCharsets.UTF_8);
        //properties配置文件加载字节流
        properties.load(inputStreamReader);
        //获取后就可以直接进行打印了
        System.out.println("Properties port:"+properties.getProperty("server.port"));
    }
}

3.4、properties缺点分析

properties配置是以键值对的形式配置的

但是配置冗余代码过多,前面写有一个连接数据库的配置(url,username,password前缀相同但是都需要再写一次)

 当然除了这个缺点,有个有利于我们的优点就是格式很简单(“=”号连接的键值对),允许空格随便打

4、yml配置文件

yml全称是yaml(Yet Another Markup Language),是一种基于文本的数据序列化语言,这里说yml是一种“语言”,是一种新的通用数据序列化格式(操作简洁)

4.1、优点分析

<1>易读性高:YAML的语法结构简单、清晰,易于理解和阅读。它的格式类似于自然语言,可以直接将数据表示为键值对,而不需要大量的标记和转义字符。

<2>可维护性高:由于YAML的易读性,它更容易维护和修改。在开发过程中,程序员可以使用YAML格式的配置文件轻松地进行调试和修改,而无需关心底层的数据结构。

<3>支持多种类型的数据:除了常见的字符串、数字、布尔值之外,YAML还支持数组、哈希表等多种类型的数据,能够满足各种应用场景的需求。同时,YAML也支持一些高级特性,比如引用和锚点等,方便用户在大型文件中进行数据共享和重复利用。

<4>平台无关性:YAML是基于文本的数据序列化格式,不依赖于任何特定的编程语言或操作系统平台,因此具有良好的跨平台可移植性。

<5>支持编程语言更为丰富,它不止限制于java使用,也可以使用在Python、PHP、JS等

虽然优点很多,但是初学者使用Spring Boot不推荐使用,格式规定简洁能省很多事情,但是格式是比较固定的,不谨慎容易出错

4.2、yml语法格式

yml是树形结构的配置文件,优点类似于Python的基础语法格式,空格划分等级,这里也是使用键值方式,连接键值方式 “key: value”

注:key后面有一个:冒号和一个空格,这个空格不能少(少了会报错)

这里就还是拿刚刚properties的配置再yml中再写一下

#yml配置文件 设置端口号
server:
  port: 8080
# 设置连接数据库
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/class?characterEncoding=utf8
    username: root
    password: root
#设置自定义 键值
javaclass: myclass

代码冗余减少了,连接数据库需要写一次spring: datasource: 

4.2.1、设置不同数据类型

#设置字符串 以下这些都是我们自己设置的键值 不是yml中自带的
string.value: string-hello

#设置布尔类型
boolean.value: true;

#设置整数
int.value: 100

#设置浮点数
float.value: 2.712
float.value1: 2712e-5  #使用科学计数法

#NULL表示 ~
null.value: ~

4.2.2、yml配置读取

yml的读取操作和properties配置文件基本是一样的,使用@Value注解 参数中除了把key放入,注意:不是使用:冒号连接,这里获取对象是.点来连接,现在我们先把刚刚properties配置文件中的内容注释掉, 以免影响yml加载,properties加载早于yml,也会优先使用properties

还是在controller包中添加一个新类在写yml读取,ReadYml类

 4.2.3、配置对象

在配置文件中也可以写一个对象以及对象的属性

下面就来展示一下

#可以写成键值不同等级的形式
student:
  id: 1
  name: 白无常
  age: 20
#也可以将对象直接写成类似数组的形式 行内写法
student1: {id: 2,name: 黑无常, age: 25}

针对对象的读取就不能通过@Value注解来实现了,需要使用另外一个注解,此处又要接触一个新的注解了@ConfigurationProperties注解来读取

读取对象是将配置文件中的对象获取,所以要添加注解加载配置文件中指定的对象

这里需要创建一个对应的实体类,当然也不一定完全需要,多几个属性,最多就是值为null

实体类代码:

@ConfigurationProperties(prefix = "student")   //加载配置文件中 对应到的对象
@Component                            //类注解
@Setter//lombok set方法注解
@Getter//lombok get方法注解
@ToString//lombok toString方法注解
public class StudentComponent {
    private int id ;
    private String name;
    private int age;
}

控制层代码:

@RestController   //相当于  @Controller注解 和 @ResponseBody注解
@RequestMapping("/test")         //设置路由
public class TestController {

    @Value("${server.port}")
    public String port;

    @Value("${javaclass}")
    public String mystr1;


    @Autowired
    private StudentComponent studentComponent;

    @RequestMapping("/port")   //设置二级路由
    public void sayhi(){
        System.out.println("从配置文件中拿出的端口号:"+port);
        System.out.println("自定义配置文件键值对取值:"+mystr1);
        System.out.println(studentComponent.toString());
    }
}

4.2.4、配置集合

配置文件也可以存放list集合,写法上和对象有几分相似

配置文件代码 ,这里写的代码也是yml文件中写的

#设置集合
databasetypes:
  name: [mysql,sqlserver,db]

#集合的行内写法
databaserow: {name: [mysql,sqlserver,db]}]}

读取集合:

这里我们还需要创建一个实体类来接收这个集合 (如下操作)

 针对集合创建的实体类:

@ConfigurationProperties(prefix = "databasetypes")
@RestController
@Setter
@Getter
@ToString
public class StudentComponent2 {
    private List<String> name;
}

 注:prefix如果注解中参数只有一个,可以加也不加,前面写的就没有加

属性注入,这里就不在附加代码了,在之前附加的代码上添加即可

当然了,系统配置不是就止于此(有需求的友友们,可以自行去官网看看,下面是官网网址)

Common Application Properties

 5、properties和yml区别

<1>语法:Properties 使用简单的键值对格式,例如 key=value;而 YAML 使用缩进和换行来表示数据结构

<2>数据类型:Properties 中的值只能是字符串类型;而 YAML 支持多种数据类型,例如字符串、整数、浮点数、布尔值、日期等

<3>复杂度:Properties 的数据结构相对简单,通常用于存储简单的配置信息;而 YAML 支持复杂的数据结构,例如列表、嵌套结构等,更适合存储较为复杂的数据

<4>可读性:由于 YAML 使用缩进和换行进行格式化,具有很好的可读性和易用性,更容易被人类阅读和编辑;而 Properties 的格式相对简单,不够直观

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

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

相关文章

C++-FFmpeg-1-VS2019-x264-fdk_aac-x265-pdb-QT5.14-makefile

1.环境搭建&#xff1a; 1.1VS2019 用的是控制台编译。 1.2.msys2 模拟linux的命令和指令。 2.源码编译与安装&#xff1a; 2.1.x264: ffmpeg :编码用X264 2.2x265: ffmpeg :编码用X265 c写的。msys2编译。 2.3.fdk-aac 音频编码。 2.4 ffmpeg源码4.3: 2.5.SDL2.0 视频渲…

ESP8266_RTOS_SDK之SPIFFS

需要在ESP8266的FLASH中存储一些可变参数&#xff0c;有两种方式&#xff0c;一种是调用SPI Flash API直接指定地址读写FLASH&#xff1b;二是在SPI FLASH上创建一块SPIFFS 分区&#xff0c;以读写文件的形式存取数据。 下面记录第二种方式&#xff0c;使用SPIFFS文件系统存取…

干货 | Elasticsearch 8.X 性能优化实战

Elasticsearch 是实现用户无缝搜索体验的关键工具。它通过提供快速、准确和相关的搜索结果&#xff0c;彻底改变了用户与应用程序的互动方式。然而&#xff0c;要确保 Elasticsearch 部署达到最佳性能&#xff0c;就必须关注关键指标&#xff0c;并对诸如索引、缓存、查询、搜索…

【计算机图形学】课堂习题汇总

在直线的光栅化算法中&#xff0c;如果不考虑最大位移方向则可能得到怎样的直线&#xff1f; A&#xff1a;斜率为1的线 B&#xff1a;总是垂直的 C&#xff1a;离散的点&#xff0c;无法构成直线 D&#xff1a;总是水平的 在直线的改进的Bresenham算法中&#xff0c;每当误…

Qt音视频开发42-网络推流(视频推流/本地摄像头推流/桌面推流/网络摄像头转发推流等)

一、前言 上次实现的文件推流&#xff0c;尽管优点很多&#xff0c;但是只能对现在存在的生成好的音视频文件推流&#xff0c;而现在更多的场景是需要将实时的视频流重新推流分发&#xff0c;用户在很多设备比如手机/平板/网页/电脑/服务器上观看&#xff0c;这样就可以很方便…

IP-GUARD如何通过流量控制策略限制客户端下载文件?

如何通过流量控制策略限制客户端下载文件? 可通过流量控制策略限制接收流量上限速度,实现控制客户端下载文件效果。流量控制支持网络地址和端口范围限制。 网络流量统计能否基于用户进行统计? 目前最新的客户端版本已经支持控制应用程序的网络流量,在应用层实现了控制…

专利进阶(二):专利撰写常用技术及算法汇总(持续更新中)

文章目录 一、前言二、常用技术及算法2.1 区跨链技术2.2 聚类算法2.3 边缘算法2.4 蚁群算法2.4.1 路径构建2.4.2 信息素更新 2.5 哈希算法2.5.1 常见算法 2.6 数字摘要2.72.82.92.10 三、拓展阅读 一、前言 专利撰写过程中使用已有技术或算法解决新问题非常常见&#xff0c;本…

基于SpringBoot的冬奥会科普平台

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理平台应运而生&#xff0c;各行各业相继进入信息管理时代&…

【五一创作】Scratch资料

Scratch软件是免费的、免费的、免费的。任何需要花钱才能下载Scratch软件的全是骗子。 1、什么是Scratch Scratch是麻省理工学院的“终身幼儿园团队”开发的一种图形化编程工具。是面向青少年的一款模块化&#xff0c;积木化、可视化的编程语言。 什么是模块化、积木化&…

leetcode每日一题【7】

第一题&#xff1a;67. 二进制求和 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。示例 1&#xff1a;输入:a "11", b "1" 输出&#xff1a;"100" 示例 2&#xff1a;输入&#xff1a;a "1010", b …

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok

文章目录 MyBatis&#xff1a;Day 02一、生命周期和作用域二、结果集映射&#xff1a;ResultMap三、日志工厂1. 标准日志&#xff1a;STDOUT_LOGGING2. LOG4J 四、分页五、使用注解开发六、Lombok注意&#xff1a; MyBatis&#xff1a;Day 02 一、生命周期和作用域 理解不同作…

Syncfusion Essential Studio Enterprise 2023.1 Crack

Syncfusion 的所有用户界面、报告、商业智能组件和库都在一个综合套件中。 Syncfusion Essential Studio 企业版包括 1,700 多个组件和框架&#xff0c;适用于 WinForms、WPF、ASP.NET&#xff08;Web Forms、MVC、Core&#xff09;、UWP、WinUI、.NET MAUI、Xamarin、Flutter、…

【Linux从入门到精通】Linux中的权限管理(实例+详解)

本篇文章对Linux下的普通用户和超级用户进行了对比详解。同时有添加和删除普通用户的讲解。也详细的解释了普通文件的权限、拥有者、所属组设置方法&#xff0c;和对目录的权限设置方法。根据需求引出粘滞位&#xff0c;对粘滞位进行详细的解释。解释每个要点是都带有实例&…

分享一个可交互的卡片

五一放假了&#xff0c;寻思着来一个应景的玩意&#xff0c;所以它诞生了。 先上效果图&#xff1a; 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><…

给失业的互联网人一个思路:别再苦苦找工作了,要去找门槛低、现金流好、天花板低、资本看不上的创业项目,一年也能几百万!...

失业大潮中的互联网人该何去何从&#xff1f;这大概是许多人在难捱的深夜反复思考的问题。 一位失业很久的网友就在痛苦思索中悟出了适合自己的道路&#xff0c;下面分享给大家&#xff0c;篇幅太长&#xff0c;小编给大家划一下重点。 先说结论&#xff1a;失业的互联网人别再…

MySql数据库的初步安装与数据表结构数据管理

1.数据库的相关了解 1.1 数据库的概念 数据库&#xff08;database&#xff09;是用来组织、存储和管理数据的仓库 数据库管理系统&#xff08;DBMS&#xff09;&#xff1a;是实现对数据有效组织&#xff0c;管理和存取的系统软件。 数据的建立和维护功能&#xff0c;数据定…

【C语言】struct结构体

文章目录 一. 结构体简述二. 结构体的声明和定义1、简单地声明一个结构体和定义结构体变量2、声明结构体的同时也定义结构体变量3、匿名结构体4、配合typedef&#xff0c;声明结构体的同时为结构体取别名5、在声明匿名结构体时&#xff0c;使用typedef给这个匿名结构体取别名 三…

用 AudioGPT 输入自然语言,可以让 ChatGPT 唱歌了?

夕小瑶科技说 原创作者 | 智商掉了一地 借助 ChatGPT 强大的理解与生成能力&#xff0c;结合基础语音模型&#xff0c;集成模型 AudioGPT 诞生了&#xff01; 最近基于 ChatGPT 的二创如雨后春笋一样冒出&#xff0c;上周我们一起看了黑客松优秀作品大赏&#xff0c;这周又有新…

HCIP-7.2VLAN间通信单臂、多臂、三层交换方式学习

VLAN间通信单臂、多臂、三层交换方式学习 1、单臂路由2、多臂路由3、三层交换机的SVI接口实现VLAN间通讯3.1、VLANIF虚拟接口3.2、VLAN间路由3.2.1、单台三层路由VLAN间通信&#xff0c;在一台三层交换机内部VLAN之间直连。3.2.2、两台三层交换机的之间的VLAN通信。3.2.3、将物…

Ae:画笔面板

Ae菜单&#xff1a;窗口/画笔 Brushes 快捷键&#xff1a;Ctrl 9 画笔 Brushes面板提供了画笔预设及画笔设置&#xff08;包括画笔动态&#xff09;等的参数设置。 画笔预设 Brush Presets 画笔预设窗格中提供了自带的画笔预设&#xff0c;主要有尖角 Hard Round、柔角 Soft R…