SpringBoot回顾2-配置文件全解析

SpringBoot回顾2-配置文件全解析

核心配置文件

可以看到我们SpringBoot项目里默认生成的是applicaiton.properties

image-20201006100755943

但其实配置文件还有.yml和.yaml格式的,在SpringBoot中都是支持的,怎么读?跟我读,压妹儿

其实配置方式都一样,主要是配置文件的书写格式存在很大的差异,下面结合之前接触的properties和新接触的yml/yaml(两者基本没有区别,怎么使用取决于你的喜好)

.properties文件(默认采用)

这个文件我们应该是很熟悉了,在之前的Spring里已经接触过,书写格式如下

#设置内嵌Tomcat端口号
server.port=80
#设置上下文根(必须以"/"开始)
server.servlet.context-path=/springboot

.yml/.yaml文件

YAML是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)

但是yaml的语法要求十分严格,有python那味儿了,缩进空格拿捏得死死的。

比如上面在properties里的配置,我们在yaml里实现如下

#springboot内嵌tomcat的端口号,和根目录
server:
  port: 8080
  servlet:
    context-path: /

红色框圈起来的地方都有空格,不能省略,而且用缩进来控制层级关系,可以看到server下有port和servlet两类,servlet下又有context-path,都是由缩进来控制的,一目了然的是,左边对齐的数据都是一个层级的

image-20201006101706214

如果存在多个配置文件,优先使用application.properties

image-20201006101955620

但是yaml文件的功能远不与此,不然为什么要引入一个新的格式的配置文件呢?他最厉害的地方是可以给实体类注入匹配值。

yaml注入配置文件

在controller文件夹同级下创建dao层,我们新建一个实体类Dog

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component	//注册bean到容器中
public class Dog {
    private String name;
    private Integer age;
	//别问我get、set方法呢,lombok老偷懒哥了
}

传统注入值的方法,@Value

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Dog {
    @Value("阿黄")
    private String name;
    @Value("18")
    private Integer age;

}

在SpringBoot的测试类内输出康康

@SpringBootTest
class Helloworld1sbApplicationTests {

    @Autowired     //把对象装配进来
    Dog dog;
    @Test
    void contextLoads() {
        System.out.println(dog);    //打印康康dog对象值的注入
    }

}

可以看到注入成功

image-20201006104245298

接下来用yaml文件注入测试一下

我们把刚才@Value注入注释掉,或者删掉

image-20201006104744857

在application.yaml里加入数据

#springboot内嵌tomcat的端口号,和根目录
server:
  port: 8080
  servlet:
    context-path: /
dog:
  name: 阿黄压妹儿
  age: 19

在实体类中绑定配置文件中的数据

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix="dog")
public class Dog {
    //@Value("阿黄")
    private String name;
    //@Value("18")
    private Integer age;

}

image-20201006105017649

从配置文件中获取值,赋值给对象的属性,第一次这里会报错,我们打开文档后发现需要添加一个导出配置文件处理器的依赖

image-20201006104520974

在pom.xml中加入

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-configuration-processor</artifactId>  
    <optional>true</optional>
</dependency>

不报错后依旧测试SpringBootTest测试类,可以看到注册成功

image-20201006105201485

我们可以加载指定的配置文件

加载指定的配置文件

**@PropertySource :**加载指定的配置文件;

@configurationProperties:默认从全局配置文件中获取值;

1、我们去在resources目录下新建一个dogData.properties文件

name=指定阿黄
age=20

2、在代码中指定加载dogData.properties文件

package com.feng.helloworld1sb.dao;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * <h3>helloworld1sb</h3>
 * <p></p>
 *
 * @author : Nicer_feng
 * @date : 2020-10-06 10:33
 **/

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@PropertySource(value = "classpath:dogData.properties")
public class Dog {
    @Value("${name}")
    private String name;
    @Value("${age}")
    private Integer age;

}

老地方测试

image-20201006105655772

咦,乱码啦,可以发现properties注入数据的时候存在中文问题,如何解决呢?

properties中文乱码设置

找到Setting—>Editor—>File Encodings

image-20201006105850923

以防万一,我们还可以在实体类的PropertySource注解中加入指定格式

@PropertySource(value = "classpath:dogData.properties", encoding = "utf-8")

运行,完事儿

image-20201006110803045

小结

我们可以看到以前用的@Value很局限,而@ConfigurationProperties的用法更加广泛,只需要在实体类上写一次,@Value要在每一个属性上写。所以在配置yaml和properties都可以获取到值时,强烈推荐用yaml,如果只是拿个别属性的值,大可用@Value,如果专门写了一个Javabean来和配置文件映射,那就直接上@ConfigurationProperties吧

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

上上签i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值