SpringBoot——基础配置

目录

属性配置

3种配置文件类型

配置文件加载优先级

属性提示消失解决方案

yaml数据格式

语法规则

读取yaml单一属性数据

yaml文件中的变量引用

读取yaml全部属性数据

读取yaml引用类型属性数据


属性配置

SpringBoot默认配置文件application.properties

eg:

SpringBoot——基础配置_第1张图片

更多属性配置在官网查询,注意用什么技术开什么配置。不用就不要配置

SpringBoot内置属性查询:官方文档中参考文档第一项: Application Properties
docs.spring.iohttps://docs.spring.io/spring-boot/docs/current/reference/html/application-propertier.html#application-properties

  • SpringBoot中导入对应starter后,提供对应配置属性
  • 书写SpringBoot配置采用关键字+提示形式书写

3种配置文件类型

1.properties ( 传统格式/默认格式)        2.yml (主流格式)        3.yaml

SpringBoot——基础配置_第2张图片

配置文件加载优先级

        当多种配置文件出现的时候,他们之间的属性共存叠加并相互覆盖,也就是说如果有相互重叠的属性,他们加载优先级覆盖问题,如果是不相同的属性就全部留下来了。

属性提示消失解决方案

        属性提示是idea提供的功能,并不是boot提供的功能,当使用yaml文件不提供属性提示的时候,idea会认为yaml不是一个属性文件,那么此时就需要让idea将yaml文件认定为一个属性文件。

SpringBoot——基础配置_第3张图片

 yaml数据格式

SpringBoot——基础配置_第4张图片

语法规则

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  • 属性值前面添加空格( 属性名与属性值之间使用冒号+空格作为分隔)
  • # 表示注释
user:
  name: zqf
  age: 20

a
#4层
a:
  b:
    c:
      d: 123

#数组
likes:
  - game
  - music
  - sleep
#缩略版
likes2: [game,music,sleep]

#对象数组
users:
  -
    name: zahngsan
    age: 20
  -
    name: lisi
    age: 19
#缩略版
users3: [{name: zhangsan, age: 18}, {name: lisi,age: 17}]

SpringBoot——基础配置_第5张图片

SpringBoot——基础配置_第6张图片

读取yaml单一属性数据

使用@Value读取单个数据,属性名引用方式: ${一级属性名.二级属性....}

//Rest模式
@RestController
@RequestMapping("/books")
public class BookController {

    //读取yaml单一数据
    @Value("${country}")
    private String country;

    @Value("${user1.name}")
    private String name;

    @Value("${likes[1]}")
    private String likes1;

    @Value("users[1].age")
    private String age1;
    
    @GetMapping
    public String getById(){
        System.out.println("springboot is running...");
        System.out.println("country===>"+country);
        System.out.println("name===>"+name);
        System.out.println("likes1===>"+likes1);
        return "springboot is running...";
    }
}

yaml文件中的变量引用

        在配置文件中可以使用${属性名}方式引用属性值,如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析,在yml中是支持转义字符的,但是需要用引号包成字符串。

 

SpringBoot——基础配置_第7张图片

读取yaml全部属性数据

        使用Environment对象封装全部配置信息,使用自动装配将所有的数据封装到一 个对象Environment中。

    @Autowired
    private Environment env;

    @GetMapping
    public String getById(){
        System.out.println(env.getProperty("country"));    //china
        System.out.println(env.getProperty("users3[1].age"));    //17
        System.out.println(env.getProperty("temDir"));    //c:\window\temp
        return "springboot is running...";
    }

读取yaml引用类型属性数据

创建类,用于封装下面的数据
Spring帮我们去加载数据到对象中,一定要告诉Spring加载这组信息
使用时候Spring中直接获取信息使用

yml:

SpringBoot——基础配置_第8张图片

 MyDataSource定义数据封装模型封装yaml文件中对应数据

package com.itheima;

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

//1.定义数据模型封装yamL文件中对应的数据
//2.定义为spring管控的bean
@Component
//3.指定加载的数据
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource {

    private String driver;
    private String url;
    private String username;
    private String password;

    @Override
    public String toString() {
        return "MyDataSource{" +
                "driver='" + driver + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

        我们要想做到封装局部数据,首先得在yml中提供数据,就是对象格式的这种数据,然后提供一个用来封装的模型类,那么这个类就是用来封装我们定义的数据中的某一部分的,记得一定是某一部分,而这个模型类怎么和他相关联呢?通过一个注解ConfigurationProperties指定他封装的是哪一组数据,把它的前缀告诉他就ok了,当然这个可以不写,默认value和在prefix出现中功能相同。

        yml数据是在springboot的环境下读取的,而模型类必须得手spring的管控数据才能封装,因此他必须定义为spring的bean,所以要挂上@Component注解。

你可能感兴趣的:(SpringBoot,java,spring,开发语言)