Spring Boot两种格式的配置文件,你都了解吗?

人生之路不会是一帆风顺的,我们会遇上顺境,也会遇上逆境,在所有成功路上折磨你的,背后都隐藏着激励你奋发向上的动机,人生没有如果,只有后果与结果,成熟,就是用微笑来面对一切小事。

导读:本篇文章讲解 Spring Boot两种格式的配置文件,你都了解吗?,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

目录

前言

一、properties配置文件

1.1、语法格式

1.2、读取配置文件

1.3、缺点分析

2、yml配置文件

2.1、yml语法

2.1.1、注意:value值的单双引号

2.2、yml配置读取

2.3、yml配置的不同数据类型

2.4、yml配置对象

2.5、yml配置集合

3、面试:properties 和 yml 配置文件有什么区别?

4、不同环境中的配置文件


前言


        Spring Boot中的配置文件是是干什么的?主要是用来写 “系统配置文件(例如端口号设置,数据库连接设置)” 和 “用户自定义配置文件”,书写格式有两种“.properties” 和 “.yml” ,接下来我们就一起来了解以下这两种格式吧~

一、properties配置文件


Spring Boot两种格式的配置文件,你都了解吗?

 

properties 配置文件是最早的配置文件格式,也是 Spring Boot 项目的默认配置文件(两种格式的配置文件中,properties的优先级最高,会先被加载)。

1.1、语法格式

properties 是以键值对的形式进行配置的,在 key 和 value 之间通过“=”连接,如下代码:

# 配置端口号
server.port=8080

# 配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=1234

Ps:

1.配置文件是通过”#”来添加注释信息的;

2.每一个关键字之间的”.”号是只层级关系;

3.注释后面可以不加空格,这是个人习惯~

1.2、读取配置文件

在 Spring Boot 项目中,可以使用 @Value 注解通过“${}”的格式来读取配置文件信息,如下:

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

@Component
public class ReadProperties {

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

    @PostConstruct
    public void PostConstruct() {
        System.out.println("port = " + port);
    }

}

执行结果如下:

Spring Boot两种格式的配置文件,你都了解吗?

Ps:被Component注解的对象在 Spring Boot 启动时会被注入到框架中,注入到框架中的时候会执行 @PostConstruct 初始化方法。

1.3、缺点分析

例如刚刚在配置文件中连接数据库的数据就存在一些冗余信息,如下:

Spring Boot两种格式的配置文件,你都了解吗?

另外还存在一些中文编码问题…

想要解决如上问题,就需要使用yml配置文件了~

2、yml配置文件


Spring Boot两种格式的配置文件,你都了解吗?

 

yml格式可读性、写法简单、便于理解,和JSON语言类似,并且支持更多的数据类型,例如清单(数组)、散列表、标记等数据形态,最重要的一点是它支持更多的编程语言(因为企业中每个部门干的活不一样,开发使用的语言也可能不相同),如Java、Golang、PHP、Python、Ruby、 JavaScript、Perl等。

2.1、yml语法

yml的语法类似于键值对的写法,基础语法是:“key: value”,值得注意的一点是,value的前面还有一个空格,这个空格是不可省略的

例如使用yml格式配置文件,连接数据库:

#配置端口号
server:
  port: 8888

# 连接数据库
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
    username: root
    password: 1234

2.1.1、注意:value值的单双引号

在yml中,不加引号和单引号效果相同(都会将特殊字符自动转义成原始字符),双引号则区别于前者(不会自动转义,例如 \n 在双引号里就表示换行)

如下Spring Boot代码:

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

import javax.annotation.PostConstruct;

@Component
public class ReadYml {

    @Value("${string.str1}")
    private String str1;

    @Value("${string.str2}")
    private String str2;

    @Value("${string.str3}")
    private String str3;

    @PostConstruct
    public void PostConstruct() {
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }

}

如下yml配置文件 

string:
  str1: hello \n world!
  str2: 'hello \n world!'
  str3: "hello \n world!"

通过@Value注解分别读取,执行结果如下:

Spring Boot两种格式的配置文件,你都了解吗?

 

2.2、yml配置读取

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

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

import javax.annotation.PostConstruct;

@Component
public class ReadYml {

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

    @PostConstruct
    public void PostConstruct() {
        System.out.println("yml port: " + port);
    }

}

执行结果如下:

Spring Boot两种格式的配置文件,你都了解吗?

 

2.3、yml配置的不同数据类型

yml可以配置很多的数据类型,甚至是null,如下代码:

# 字符串

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: ~

2.4、yml配置对象

在yml中配置对象,如下:

  student:
    id: 1
    name: 周杰伦
    age: 18

或者是使用行内写法:

 student: {id: 1, name: 周杰伦, age: 18}

此时,在yml中,对象的读取就不能使用 @Value 注解了,而是要使用另一个注解 @ConfigurationProperties 来读取(此注解的参数是一个键值对形式,prefix = “yml中的对象名称”,或者参数直接写yml中对象的名称),并且这个注解需要搭配这个对象的实体类(1.属性名必须要以yml配置中的key值一致,2.必须有setter和getter方法,因为需要这两个方法初始化实体类对象),具体的代码如下:

实体类如下:

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

@ConfigurationProperties(prefix = "student")
//或者直接写:@ConfigurationProperties("student")
@Component
@Data
public class Student {

    private int id;
    private String name;
    private int age;

}

调用类代码如下:

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

import javax.annotation.PostConstruct;

@Component
public class ReadStudent {

    @Autowired
    private Student student;

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

}

执行结果如下:

Spring Boot两种格式的配置文件,你都了解吗?

注意事项:

Spring Boot两种格式的配置文件,你都了解吗?

2.5、yml配置集合

yml配置文件也可以配置list集合,如下:

student:
  stu1:
    - 周杰伦
    - 林俊杰
    - 薛之谦

或者使用行内写法,如下:

student: {stu1: [周杰伦,林俊杰,薛之谦]}

读取对象也是通过@ConfigurationProperties 来读取,如下:

实体类:

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

import java.util.List;

@ConfigurationProperties("student")
@Data
@Component
public class ListStudent {

    private List<String> stu1;

}

调用类:

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

import javax.annotation.PostConstruct;

@Component
public class ReadListStudent {

    @Autowired
    private ListStudent listStudent;

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

}

执行结果:

Spring Boot两种格式的配置文件,你都了解吗?

3、面试:properties 和 yml 配置文件有什么区别?


  • properties是以 key=value 的形式配置的键值对类型的配置文件,yml则是以 key: value 类似JSON格式的树形配置方式进行配置,层级之间采用缩进,且value前的空格不可省略。
  • properties 为早期并且默认的配置⽂件格式,但存在一定的冗余数据,使用yml可以很好的解决冗余问题。
  • yml通用性更好,支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份 配置⽂件作为 Java 和 Go 的共同配置⽂件。
  • yml ⽀持更多的数据类型。

4、不同环境中的配置文件


实际的工作中,我们可能会面临两种环境,分别是“生产环境” 和 “开发环境”,而针对于这两种环境,我们需要使用不同的yml配置文件(假设以yml为例),一般我们命名为如下两种形式:

  • application-dev.yml
  • application-prod.yml

第一个是开发环境,第二个是生产环境。

Ps:文件的开头的 “application-”是固定的,在这后面的我们可以自定义。

那么我们该如何在 application.yml 中配置到底运行哪个环境呢?

通过如下代码即可任意写换(例如配置成dev开发环境):

spring:
  profiles:
    active: dev

Ps:一个配置文件中只能有一个spring关键字

Spring Boot两种格式的配置文件,你都了解吗?

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/124260.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!