SpringBoot配置文件

目录

配置文件

SpringBoot配置文件

配置文件的应用

初步使用配置文件

配置文件的格式

properties 配置文件

properties的基本语法

properies配置文件

​编辑 properties的缺点

yml 配置文件

yml的基本语法

yml配置读取

value值加单双引号

配置对象

配置集合

配置Map

yml 优缺点


配置文件

配置文件是一种文本文件,其中包含应用程序、软件或系统的特定设置和参数。

配置文件主要是为了解决硬编码带来的问题,将可能会发生改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。

硬编码:将数据直接嵌入到程序或其他可执行对象的源代码中,也就是我们常说的"代码写死".

SpringBoot配置文件

SpringBoot的配置文件是用来配置SpringBoot 应用程序的各种参数和设置的文件

很多项目或者框架的配置信息放在配置文件中,如:

(1)项目的启动端口

(2)数据库的连接信息(包含用户名和密码的设置)

(3)第三方系统的调用密钥等

(4)用于发现和定位问题的普通日志和异常日志

  ...

配置文件的应用

初步使用配置文件

SpringBoot内置了Tomcat服务器,其默认端口号是8080,但电脑上8080端口号可能被其他应用程序占用,因此,SpringBoot支持用户自定义端口号

我们通过自定义端口号来了解配置文件

SpringBoot在创建项目时,就已经创建了配置文件:

我们写一个简单的程序:

@RestController
public class test {
    @RequestMapping("/hello")
    public String hello(){
        return "hello...";
    }
}

运行,并观察日志:

访问程序:http://127.0.0.1:8080/hello 

我们在配置文件中修改端口号:

再次运行程序,观察日志:

接着,我们通过访问程序进行测试:http://127.0.0.1:9090/hello

此时再次运行:http://127.0.0.1:8080/hello

配置文件的格式

SpringBoot配置文件有以下三种:

application.properties

application.yml

application.yaml

其中,yml是yaml的简写,使用频率较高,yaml与yml的使用方式是相同的,因此我们学习了yml文件的使用后,也就能够使用yaml文件

当应用程序启动时,SpringBoot会自动从classpath路径找到并加载application.properties 、application.yaml 或 application.yml 文件

其中,yml 和 properties 的区别 类似与商品的新旧包装,properties类型的配置文件就属于旧包装,也就是是创建SpringBoot项目时默认的文件格式(仓库里还有库存),而yml属于新包装

properties 配置文件

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

properties的基本语法

properties 是以 键值对 的形式配置的,key 与 value 之间通过 = 连接:

其中,配置文件使用 # 来添加注释 

properies配置文件

在项目中,当我们想要读取配置文件中的内容时,可以使用 @Value 注解来实现

@Value 注解使用 "${}" 格式读取

配置:

读取:

@RestController
public class test {
    @RequestMapping("/hello")
    public String hello(){
        return "hello...";
    }

    @Value("${name}")
    private String name;
    @RequestMapping("/readConfig")
    public String readConfig(){
        return "读取到:" + name;
    }
}

运行结果:

 properties的缺点

properties配置是以 key - value 的形式配置的:

我们可以看出,properties配置文件中会有很多的冗余信息:

想要解决这个问题,我们可以使用 yml 配置文件

yml 配置文件

yml的基本语法

yml是 树形结构 的配置文件,其基础语法为 key: value

其中,key 和 value 之间由 英文冒号和空格 组成,空格不可省略

我们创建 yml 文件,但由于我们已经有了一个 properies文件, 

properties文件 和 yml文件可以存在于一个项目中吗?

我们直接创建 yml 文件:

 

发现 .properties 和 .yml 可以共存

我们使用 yml 文件进行配置:

 

配置时需要注意冒号后必须要有空格,当未加空格时 key 也没有高亮显示

使用 yml 连接数据库:

此时,相比于 使用 properies 连接数据库:

使用 yml 时,配置文件更加清晰、易读,更方便地处理较长的配置信息

yml配置读取

yml 的读取与 properies 相同,使用 @Value: 

    @Value("${age}")
    private int age;
    @RequestMapping("/readAge")
    public String readAge(){
        return "读取到:" + age;
    }

运行结果:

此时,我们再来思考一个问题:

既然 .properies 和 .yml可以共存,当配置文件内容冲突时会怎样呢?

我们配置 name来进行测试:

yml中 : name: lisi

properies中 : name=zhangsan

运行结果:

我们可以发现: 当 .properties 和 .yml 共存时,两个配置文件都会加载,而当配置文件内容存在冲突时,以 .properties 为主,也就是 .properties 的优先级更高

虽然 .properties 和 .yml 可以共存,但我们通常采取一种统一的配置文件格式(方便维护)

value值加单双引号

字符串默认不用加 单引号 或 双引号,但当加上 单引号 或 双引号时:

    @Value("${str1}")
    private String str1;
    @Value("${str2}")
    private String str2;
    @Value("${str3}")
    private String str3;

    @RequestMapping("/readStr")
    public void readStr(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        return;
    }

运行结果:

我们可以看出:当加上 双引号 时,字符串中的特殊字符表示其特殊含义,而当 不加 或加 单引号 时,字符串中的特殊字符是普通字符

配置对象

我们可以在 yml 中配置对象:

或是使用行内写法:

student: {id: 001, name: zhangsan, age: 18}

此时 读取配置文件中的对象,就不能再使用 @Value 了,而要使用 @ConfigurationProperties

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

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

访问:

@Controller
public class StudentController {
    @Autowired
    private Student student;
    
    @RequestMapping("/readStudent")
    public String readStudent(){
        return student.toString();
    }
}

运行结果:

配置集合

yml 也可以配置集合:

也可以写成行内样式:

listname: {name: [zhangsan, lisi, wangwu]}

与读取对象相同,集合也需要使用 @ConfigurationProperties 来读取:

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

import java.util.List;

@ConfigurationProperties(prefix = "listname")
@Data
@Component
public class ListConfig {
    private List<String> name;
}

访问:


    @Autowired
    private ListConfig listConfig;

    @RequestMapping("/readList")
    public String readList(){
        return listConfig.toString();
    }

运行结果:

配置Map

yml 还可以配置Map:

同样,Map使用 @ConfigurationProperties 来读取:

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

import java.util.Map;

@ConfigurationProperties("employees")
@Data
@Component
public class MapConfig {
    private Map<String, String> info;
}

获取Map:

    @Autowired
    private MapConfig mapConfig;

    @RequestMapping("/readMap")
    public String readMap(){
        return mapConfig.toString();
    }

 运行结果:

yml 优缺点

优点:

(1)可读性高,写法简单,易于理解

(2)支持更多数据类型,可以简单表达对象、数组等数据形态

(3)支持更多编程语言,在Java、python、JavaScript等中也可以使用

缺点:

(1)不适合写复杂的配置文件

(2)对格式有较强的要求(尤其要注意空格)

  • 46
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠枬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值