当前位置: 首页 > article >正文

SpringBoot【二】yaml、properties两配置文件介绍及使用

一、前言

续上一篇咱们已经搭建好了一个springboot框架雏形。但是很多初学的小伙伴私信bug菌说,在开发项目中,为啥.yaml的配置文件也能配置,SpringBoot 是提供了两种2 种全局的配置文件嘛,这两种配置有何区别,能否给大家伙讲讲。一看这位小伙伴就非常好学啊,继续保持。

创建Spring Boot项目时,默认 resources 目录下就有一个application.properties 文件,可以在 application.properties 文件中进行项目配置,但是这个文件并非唯一的配置文件,

1、在 Spring Boot 中,一共有 4 个地方可以存放该配置文件,并按照如下优先级依次降低,如下:

  1. 当前项目根目录的config下
  2. 当前项目根目录下
  3. resource目录的config目录下
  4. resource目录下

2、SpringBoot 默认使用以下 2 种全局的配置文件,其文件名是固定的。

  • application.properties
  • application.yml

application.properties:语法:key=value 或行内写法(k: v;[Set/List/数组];{map,对象类型的属性},并且[]可以省,但是{}不能省)。

比如上一篇提到的配置端口号:

#指定运行端口
server.port=8080

application.yml : yaml ainot myarkup language ,不是一个标记文档。key:  value

注意:yml默认可以不写引号,“”(双引号)会将其中的转义符进行转义,其他的(单引号啥的)不会。

二、application.properties使用

1、公共配置文件:application.properties(注意,此处取名别直接name,会跟系统默认的重名,所以;取名userName即可以示区分。)

user.userName=bug菌
user.sex=男
user.age=18

然后通过@Value 注解将这些属性注入;

@Value("${user.userName}")
private String userName;
@Value("${user.sex}")
private String sex;
@Value("${user.age}")
private Integer age;

@GetMapping("/hello1")
public String index() {
    return "我是"+userName+",性别:"+sex+",我今年"+age+"岁啦!";}

或者创建一个user类;然后属性一一注入;

@Component
public class User {

    @Value("${user.userName}")
    private String userName;
    @Value("${user.sex}")
    private String sex; 
    @Value("${user.age}")
    private Integer age;

public String getUserName() {
    return userName;
}
public void setUserName(String userName) {
    this.userName = userName;
}    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Integer getAge() {
        return age; 
   }    public void setAge(Integer age) {
        this.age = age;
   }
}

@Autowired
private User user;

@GetMapping("/hello2")
public String test() {
    return "我是"+user.getName()+",性别:"+user.getSex()+",我今年"+user.getAge();
}

然后分别访问一下;

http://localhost:8080/test/hello1

http://localhost:8080/test/hello2

ps:如果遇到打印出的中文乱码,如下所示,不要慌;bug菌教你怎么解决;好伐。

解决办法:应该是编辑器的问题,默认是GBK;你直接左上角File->Settings->File Encodings然后按如下设置即可。

以上就是application.properties配置文件的使用情况;另外有兴趣的同学还可以去试试八大类型的其他几种类型;bug菌此处就不一一赘述啦。提示:都跟上边是一样的玩法,唯独就是写法不太一样。

拓展:

#多行写法
student:
  name: "Li Ming"
  age: 18

#多行写法
person:
   - man
  - women

#单行的行内写法
person: [man,women]

三、application.yaml使用

语法与.properties稍微不太一样;[key: value];

user:
  userName: 刘亦菲
  sex: 女
  age: 20

注意:yml默认可以不写引号,“”(双引号)会将其中的转义符进行转义,其他的(单引号啥的)不会。

测试一下:http://localhost:8080/test/hello1

使用yml需要注意一下几点:

  • 不同“等级” 用冒号隔开
  • 次等级的前面是空格,不能使用制表符(tab)
  • 冒号之后如果有值,那么冒号和值之间至少有一个空格,避免紧贴
  • 要么用application.properties 要么用 application.yml,不要都用使自己混乱

拓展:例如:对象写法+数组写法等复合型语法。感兴趣的同学可以尝试看看。

person:
  name: zhangsan
  age: 30
  pets:
    -dog
    -cat
    -pig
  car:
    name: QQ
  child:
    name: zhangxiaosan
    age: 2

四、两种配置文件如何选择

1、当properties和yml同时存在时,properties的优先级会比yml高(记忆技巧:这个世界上,谁长,谁NB)。

2、两种文件都是用#注释。

3、yml的优点在于可以省去一下重复代码。

4、在properties文件里面的 “ .” 连接在yml文件里面全部换成 ":" 进行连接,并且每一级之间必须换行,在第二级开始应该进行一个Tab键的缩进,如果是同级的就不需要进行缩进。

5、在yml文件里面如果是需要进行赋值那么必须是要在 ":" 后面进行一个空格键的缩进。

6、在yml文件里面所有的配置,相同级别只能出现一次,比如我们使用了spring这个级别,那么我们在后边进行spring级别的配置的时候就必须在这个地方进行,不能在写一个spring级别。

... ...

至于如何选择,想必你们心中都有答案了吧!


http://www.kler.cn/a/430228.html

相关文章:

  • IEC61850遥控-增强安全选控是什么?
  • 【Ubuntu】 Ubuntu22.04搭建NFS服务
  • 【网络协议】开放式最短路径优先协议OSPF详解(四)
  • JVM 优化指南
  • 微信小程序map组件所有markers展示在视野范围内
  • DuckDB:PRAGMA语句动态配置数据库行为
  • yocto的xxx.bb文件在什么时候会拷贝文件到build目录
  • Java设计模式 —— 【创建型模式】建造者模式详解
  • 鸿蒙 Next 可兼容运行 Android App,还支持出海 GMS?
  • VLM-OCR-Demo:一个使用VLM用于OCR任务的示例
  • Java 设计模式~工厂模式
  • 工业—使用Flink处理Kafka中的数据_EnvironmentData2
  • 【爬虫】– 抓取原创力文档数据
  • Python 类的设计(以植物大战僵尸为例)
  • 3D Gaussian Splatting代码详解(一):模型训练、数据加载
  • 单片机 PCB 设计要点
  • 数据结构(Queue队列)
  • Linux:network:添加ip的时候自动添加一个本地路由
  • 针对一个系统的权限管理这样的业务场景,使用各设计模式解说
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-augment.py
  • MQTT消息服务器mosquitto介绍及说明
  • zerotier实现内网穿透(访问内网服务器)
  • 得物新一代可观测性架构:海量数据下的存算分离设计与实践
  • 期末复习-Hadoop综合复习
  • 力扣--LCR 134.Pow(x,n)
  • K8S存储实战案例:NFS+StorageClass+PV/PVC+Deployment