您当前的位置: 首页 >  spring

梁云亮

暂无认证

  • 4浏览

    0关注

    1191博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SpringBoot配置文件讲解 及 读取

梁云亮 发布时间:2020-01-22 09:52:33 ,浏览量:4

配置文件简介

Spring Boot 项目使用一个全局的配置文件 application.properties 或者是 application.yml,在 resources 目录下或者类路径下的 /config 下,一般我们放到 resources 下。 application.properties和application.yml都是spring boot的配置文件,但是两种配置文件的里面添加配置却不一样。yml这种方式更有层次感,它是天生就是一种树型建构,可读性更强,如下所示:

  • application.properties: 在这里插入图片描述
  • application.yml 在这里插入图片描述

更多配置

注意
  • application.properties优先级高于application.yml
  • 建议优先使用application.yml,官方给的很多demo,都是用yml文件配置的。
  • 将.properties里面的配置key换成yml只需要将“.”换成“:”,然后换行,将“=“ 换成“:”,在value前面一定要有一个空格,同一个key必须合并到一个树结构下。
  • 字符串默认不用加上单引号或者双引号; “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思 name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据 name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
yml 文件规则
  • key: value 格式书写
  • key 后面跟着冒号,再后面跟着一个空格,然后是值
  • yml不支持tab缩进
  • 可以使用 “-小写字母” 或 "_小写字母"来 代替 “大写字母”,如 userName 与 user-name、user_name 含义是一样的
解决Intellij下配置文件乱码问题

在这里插入图片描述

yml常见格式
  1. 普通的值(数字,字符串,布尔) 字符串默认不用加上单引号或者双引号,比如: "":双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思 name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi ’’:单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据 name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

  2. 对象、Map (属性和值) (键值对) 对象还是k: v的方式。k: v:在下一行来写对象的属性和值的关系;注意缩进(不支持tab,使用空格)

  3. 数组 (List、Set) 数组(List、Set)用- 值表示数组中的一个元素

yml配置文件读取 方式一:@Value 配置文件内容:
name: hc
age: 18
content: "${name}的年龄是:${age}"
Controller代码:
@RestController
public class YmlInfoController {
    @Value("${name}")
    private String name;
    @Value("${age}")
    private Integer age;
    @Value("${content}")
    private String info;

    @RequestMapping("/f1")
    public String f1() {
        System.out.println(name + "\t" + age);
        return info;
    }
}

注意:@Value所在的类需要是一个组件,如果是实体类需要加上@Component注解。

方式二:@ConfigurationProperties 示例1: 配置文件内容:
stu:
  num: 1001
  name: zhangsan
  age: 18
实体类:

创建实体类,使用@Component注释,同时使用@ConfigurationProperties并通过prefix (前缀)指定相应的 key 就可以了

@Component
@ConfigurationProperties(prefix = "stu")
public class YmlInfo {

    private Integer num;
    private String name;
    private Byte age;

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

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

    public Byte getAge() {
        return age;
    }

    public void setAge(Byte age) {
        this.age = age;
    }
}
Controller代码:

在Controller中通过@Autowired加载即可

@RestController
public class YmlInfoController {
    @Autowired
    private YmlInfo ymlInfo;

    @RequestMapping("/f2")
    public YmlInfo f2(){
        return ymlInfo;
    }
}
示例2: 配置文件内容:
bean:
  map:
    num: 1001
    name: zhangsan
    age: 18

  array: 1,2,3,4,5,6

  list:
    - swim
    - jump
    - run
    - read
实体类:
@Component
@ConfigurationProperties(prefix = "bean")
public class YmlInfo {

    private Integer num;
    private String name;
    private Byte age;

    private Map map;
    private String[] array;
    private List list;

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

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

    public Byte getAge() {
        return age;
    }

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

    public Map getMap() {
        return map;
    }

    public void setMap(Map map) {
        this.map = map;
    }

    public String[] getArray() {
        return array;
    }

    public void setArray(String[] array) {
        this.array = array;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }
}
Controller代码:
@RestController
public class YmlInfoController {
    @Autowired
    private YmlInfo ymlInfo;

    @RequestMapping("/f22")
    public YmlInfo f22(){
        return ymlInfo;
    }
}
方式三:@Environment 配置文件内容:
array: 1,2,3,4,5,6

favorite:
  -swim
  -jump
  -run
  -read
Controller代码:
@RestController
public class YmlInfoController3 {
    @Autowired
    private Environment environment;

    @RequestMapping("/f3")
    public String f3() {
        String array = environment.getProperty("array");
        System.out.println(array);
        String favorite = environment.getProperty("favorite");
        return favorite;
    }
}
关注
打赏
1665023148
查看更多评论
立即登录/注册

微信扫码登录

0.2083s