SpringBoot配置文件

本文介绍了SpringBoot项目中配置文件的作用,包括存储数据库连接信息、端口设置和调用秘钥等。文章对比了.default.properties和.yml两种格式,指出.properties具有最高优先级,但.yml更易读且支持更多数据类型。通过示例展示了如何读取配置文件内容,并讨论了.yml配置对象和集合的方法。
摘要由CSDN通过智能技术生成

1.配置文件的作用

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

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

2.配置文件的格式

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

  • .properties
  • .yml

如下图所示:

 【说明】

  • .properties是我们创建Spring Boot项目自带的配置文件,.yml是我们自己创建的一种配置文件,名字需要和项目自带的配置文件名字相同,只是后缀不同
  • properties可以和yml一起存在于一个项目中,如果配置文件中出现了相同的配置,比如properties设置端口号为8888,yml设置端口号8080,那么我们以项目自身的配置文件(properties)为主。就是说.properties配置文件的优先级最高,但加载完 .propertise 文件以后,也会加载 .yml 文件的配置信息。
  • 理论上来讲 .properties 可以和 .yml 共存,但是实际业务中为了方便管理,我们会统一适用 .yml配置文件,这样可以更好的维护。就像我们聊天时可能适用微信或QQ,但是我们同时适用会导致频繁的切换,所以我们更加偏向一个聊天软件。

3.properties 配置文件说明

.properties是项目Spring Boot项目默认的配置文件。

3.1properties基本语法

properties是按照键值对的形式配备的,key和value之间是以“=”链接的,比如:

 PS:配置文件中的注释是适用#表示的。

properties模式的编码方式不是UTF8,我们要进行设置,否则这里会出现乱码的情况。

 3.2读取配置文件

如果在项目中,我们需要主动的读取配置文件中的内容,我们可以适用@Value注解来实现。@Value注解使用“${}"的格式读取,代码如下

package com.example.demo.component;

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

import javax.annotation.PostConstruct;

/**
 * Describe:
 * User:lenovo
 * Date:2023-07-24
 * Time:10:42
 */
@Component
public class ReadYml {
    @Value("${server.port}")
    private String port;

    @PostConstruct
    public void postConstruct() {
        System.out.println("端口号: " + port);
    }
}

@PostConstruct只是让这个方法随着项目的启动而运行,我们不用过度深究。

 3.3propertise缺点分析

properties配置文件是以kye-value的形式配置的,如下

 从上面的配置中我们发现很多都是重复的内容,比如:spring.datasource。为了解决这个问题,我们可以使用 .yml文件

4.yml配置文件说明

yml的全程为 Yet Another Markup Language,翻译成中文“另一种标记语言”,同时还可以简写为yaml,同时文件的后缀使用.yaml也是可以的。

优点分析】

  • yml是一个可读性很高,易于理解,它的语法和JSON语言相类似。
  • yml支持更多的数据类型,它可以简单表达数组、散列表、标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合来表达或编辑数据结构、各种配置文件等等。
  • yaml支持更多的编程语言,如Java,golang,PHP, Python, Ruby、JS、Perl等

为什么推荐使用 .yml?

       很多的编程语言可能使用自己的配置文件,它们的配置文件可能不能被其他的语言识别,这就导致在项目中出现很多的配置文件,并且在内容上基本相同,导致配置如果发生变化,我们需要更改很多的配置文件。使用.yaml可以有效的避免这种问题。

4.1yml基本语法

yaml是树形结构的配置文件,它的基本语法是“key: value",注意key和value之间是英文的:和空格的方式组成的,其中的空格是不能省略的。

使用yml链接数据库】

 我们发现使用 .yml,省去了一些繁琐的过程,但是并不是意味着它非常好用。如果我们省略了值前面的空格,键前面的空格少了一个都会出现报错的情况。对于新手学习者不是很友好。

4.2yml使用进阶

4.2.1yml配置不同数据类型

 4.2.1.1yml配置读取

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

@Component
public class ReadYml {
//    @Value("${server.port}")
//    private String port;
//
//    @PostConstruct
//    public void postConstruct() {
//        System.out.println("端口号: " + port);
//    }
    @Value("${String.value}")
    private String hello;

    @PostConstruct
    public void postConstruct() {
        System.out.println("字符串:" + hello);
    }
}

 4.2.1.2练习

使用代码测试一下,读取值为null的配置和根本不存在的配置结果是否相同

    @Value("${null.value}")
    private String ret;

    @PostConstruct
    public void postConstruct() {
        System.out.println("Null的结果:" + ret);
    }

 4.2.1.3注意事项

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

 

 从上述的结果看:

  • 字符串默认不需要加单引号或双引号
  • 单引号不会转义特殊字符,特殊字符只是一个普通的数据
  • 双引号会转义特殊字符,特殊字符会有自己的含义

4.2.2配置对象

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

 这个时候我们不能再使用@Value来读取配置中的对象了,我们需要另一个注解@ConfigurationProperties来读取,具体实现如下:

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

/**
 * Describe:
 * User:lenovo
 * Date:2023-07-24
 * Time:20:20
 */
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class StudentComponent {
    private int id;
    private String name;
    private int age;
}

 注意:@Data是lombok插件中关键字,可以自动生成get(), set(), toString()等方法

调用这个类

@Component
public class ReadYml2 {
    @Autowired
    private StudentComponent studentComponent;

    @PostConstruct
    public void doPostConstruct() {
        System.out.println(studentComponent);
    }
}

 4.2.3配置集合

配置文件还能配置list集合,如下所示:

#配置集合
dbtypes:
  name:
    - mysql
    - sqlserver
    - bd2
#行内写法
dbtypes1: {name: [mysql,sqlserver,db2]}

集合的读取和对象类似,也是使用@ConfigurationProperties来读,实现如下:

@Component
@Data
@ConfigurationProperties("dbtypes")
public class ListComponent {
    private List<String> name;
}

打印类的实现如下:

    @Autowired
    private ListComponent listComponent;

    @PostConstruct
    public void doPostConstruct1(){
        System.out.println(listComponent);
    }

更多的配置我们可以查看官网:Common Application Properties (spring.io)

5.properties VS yml

  • properties是采用key=value的形式配置键值类型的配置文件,yml使用的是类似json格式的树形配置方式,yml层级之间使用换行缩进的方式,同时键值之间使用“:  ”的方式分隔
  • properties是早期并且默认的配置文件
  • yml通用性刚好,支持更多的语言
  • yml支持更多的数据类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值