SpringBoot中配置文件

本文介绍了YAML的基本语法,包括数据结构和常用写法,并详细讲述了在SpringBoot中如何进行配置文件的注入,通过pom.xml、Person类、配置文件及测试类的实例展示了配置注入的过程。同时对比了@Value()和@Configuration()注解在属性值注入上的使用场景。
摘要由CSDN通过智能技术生成

一、YAML的语法

  • 以数据为中心,比json、xml更适合做配置文件
1.YAML的基本语法
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格
  • 缩进时空格数目不重要,只要相同层次的元素左侧对齐即可
  • 大小写敏感

YAML的写法

#YAML的写法
server
  port: 8080

xml的写法

#xml的写法
<server>
  <port>8081></port>
</server>
2.YAML支持的三中数据结构
  • 对象:键值对的集合
  • 数组:一组按次序排列的值
  • 字面量:单个的,不可再分的值
3.YAML的常用写法
  • 对象(Map)
    • 对象的一组键值对,使用冒号分割,例如username: admin
    • 冒号后面必须有空格来分开键值
    • {k: v}常用写法
#YAML
persons:
  username: zhangsan
  age: 28
  gender: boy

简化版,常用写法

persons: {username: zhangsan,age: 28,gender: boy}
  • 数组
    • 一组连词线(-)开头的行,构成一个数组,[]为行内写法
    • 数组,对象可以组合使用
pets:
 - cat
 - dog
 - pig

行内写法:

pets: [cat,dog,pig]
  • 字面量

    • 数字、字符串、布尔、日期
    • 字符串
      • 默认不使用引号
      • 可以使用单引号或双引号,单引号会转义特殊字符
      • 字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转义为空格。
  • 文档

    • 多个文档用---隔开

二、配置文件的注入

在这里插入图片描述

1.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.spring.boot</groupId>
 <artifactId>springboot-fast</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>springboot-fast</name>
 <description>Demo project for Spring Boot</description>

 <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.1.7.RELEASE</version>

     <relativePath/> <!-- lookup parent from repository -->
 </parent>

 <properties>
     <java.version>1.8</java.version>
 </properties>

 <dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-webflux</artifactId>
     </dependency>

     <!--加载配置文件处理器的依赖,配置文件进行绑定时就会有提示-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-configuration-processor</artifactId>
         <optional>true</optional>
     </dependency>

     <!--单元测试的依赖-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>io.projectreactor</groupId>
         <artifactId>reactor-test</artifactId>
         <scope>test</scope>
     </dependency>
 </dependencies>

 <!--Maven插件-->
 <build>
     <plugins>
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
     </plugins>
 </build>
</project>
2.Person类
//此注解将配置文件中的每一个属性的值都映射到这个组件中
//告诉SpringBoot将本类中所有属性和配置文件中相关的配置进行绑定
//prefix = "person"配置文件中哪个下面的属性进行一一映射
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;

    private Map<String, Object> maps;
    private List<Object> lists;
    private Dog dog;
    get()set()tostring()方法等
  • Dog类
public class Dog {
    private String name;
    private Integer age;
    get()set()方法
3.配置文件
  • application.properties
person.last-name=小可爱
person.age=18
person.boss=true
person.lists=a,b,c
person.maps.k1=1
person.maps.k2=2
person.birth=2019/10/20
person.dog.name=dog
person.dog.age=5
  • application.yml
person:
  lastName: zhangsan
  age: 18
  boos: false
  birth: 2019/8/23
  maps: {k1: v1,k2: v2,k3: v3}
  lists:
    - lisi
    - lihua
    - wentian
    - gengfei

  dog:
    name: huahua
    age: 9
4.测试类
package com.spring.boot.springbootfast;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

//springBoot的单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootFastApplicationTests {
    @Autowired
    private Person person;
    @Test
    public void contextLoads() {
        System.out.println(person);
    }
}

三、@Value()和@Configuration()的比较

ConfigurationProperties@Value
功能批量注入配置文件中的属性一个一个去指定
松散绑定zhic不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持
  • 无论配置文件是yml还是properties,都可以获取值
  • 分情况来使用两种注解注入属性值
//这个类的所有方法返回的数据直接写给浏览器,如果是对象转为json数据
@RestController
public class HelloController {

  //这种注入可以直接获取配置文件中的值
  @Value("${person.last-name}")
  private String name;

  @RequestMapping("/sayHello")
  public String hello() {
      return "welcome "+name+" to JavaWorld!";
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值