Edehuag

导航

springboot配置与获取配置数据

配置文件

SpringBoot是基于约定的,所以很多配置都有默认值(如端口号),但如果想使用自己的配置替换默认配置的话,
就可以使用application.properties或者application.yml(application.yaml)进行配置。配置文件默认在resources文件下
properties(键值对,且优先级在yml之前)

server.port=8080

yml(冒号和值之间要有空格)

server:
  prot: 8080

springboot中对于配置文件的加载顺序:properties>yml>yaml

yaml语法

YAML全称是YAML Ain't Markup Language。
YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,
比如:C/C++,Ruby,Python,Java,Per,C#,PHP等。YML文件是以数据为核心的,比传统的xmI方式更加简洁。
YAML文件的扩展名可以使用.yml或者.yaml。

1、大小写敏感
2、数据值前边必须有空格,作为分隔符
3、使用缩进表示层级关系
4、缩进时不允许使用Tab键,只允许使用空格(各个系统的Tab对应的空格数目可能不同会导致层次混乱)缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
5、# 表示注释,从这个字符一直到行尾,都会被解析器忽略。

server:
  port:8080
  address:127.0.0.1
name: abc

yaml数据格式

对象(map):键值对的集合。

person:
  name:zhangsan
#行内写法
person:{name: zhangsan}

数组:一组按次序排列的值

address:
 - beijing
 - shanghai
#行内写法
address: [beijing,shanghai]

纯量:单个的、不可再分的值

msg1: 'hello \n world' #单引忽略转义字符
msg2: "hello \n world" #双引识别转义字符

参数引用

name: edhug
person: 
  name: ${name}

总结

1)配置文件类型
●properties:和以前一样
●yml/yaml:注意空格

2)yaml特点:简洁、以数据为核心

3)基本语法:
大小写敏感
数据值前边必须有空格,作为分隔符
使用空格缩进表示层级关系,相同缩进表示同一级

4)数据格式:对象、数组:使用“-”表示数组每个元素、纯量

5)参数引用:${key值}

获取配置文件内容的三种方式

1)@Value
2)Environment
3)@ConfigurationProperties

package com.edhug.springbootinit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
##@Value方式获取
    @Value("${name}")
    private String name1;
    @Value("${person1.name}")
    private String name2;
    @Value("${person1.age}")
    private int age;
    @Value("${address1[0]}")
    private String address1;
    @Value("${msg1}")
    private String msg1;
    @Value("${msg2}")
    private String msg2;
##Environment方式获取
    @Autowired
    private Environment env;
##@ConfigurationProperties方式获取这种方式需要单独编写配置类
    @Autowired
    private Person person;

    @RequestMapping("/hello2")
    public void hello2(){
        System.out.println(name1);
        System.out.println(name2);
        System.out.println(age);
        System.out.println(address1);
        System.out.println(msg1);
        System.out.println(msg2);
        System.out.println("-------------------------");
        System.out.println(env.getProperty("person1.name"));
        System.out.println(env.getProperty("person1.age"));
        System.out.println(env.getProperty("address1[0]"));
        System.out.println("-------------------------");
        System.out.println(person);

    }
    @RequestMapping("/hello")
    public String hello(){
        return "hello spring boot";
    }
}

对应@ConfigurationProperties方法编写的配置类

package com.edhug.springbootinit;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
//被spring所识别
@Component
//指定yml中对应的属性名称
@ConfigurationProperties(prefix = "person1")
public class Person {
    private String name;
    private int age;
    private String address[];

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String[] getAddress() {
        return address;
    }

    public void setAddress(String[] address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

posted on 2024-11-15 09:44  饿得慌~  阅读(86)  评论(0编辑  收藏  举报