SpringBoot(二) 配置文件

本文详细介绍了SpringBoot配置文件的使用,包括YAML的基本语法和数据格式,配置文件值的获取,@ConfigurationProperties与@Value的区别,配置文件的占位符,Profile的多环境支持,加载位置以及外部配置的加载顺序。内容涵盖YAML和properties的配置,以及Spring注解的使用。
部署运行你感兴趣的模型镜像

每日一句:

	You can't skip steps
	You have to put one foot in front of the other
	Things take time
	There are no shortcuts

1.YAML基本语法
使用缩进表示层级关系
缩进时不允许使用tab键,只能只用空格
缩进的空格数不限制,只要相同层对齐就好
大小写敏感
2.YAML支持的数据格式
对象:键值对的集合
数组:一组按次序排列的数据类型相同的值
字面量:单个的,不可再分的值(普通的值,比如数字、字符串、布尔之类)

字符串不用加上单引号或双引号

双引号:会转义特殊符号
例如: name : " abc \n def "  输出:abc 有换行效果 def

单引号:不会会转义特殊符号
例如: name : ‘ abc \n def ’ 输出:abc \n def

对象

 name:
   		lastName: 枫
   		firstName: 冬

行内写法

name: {lastName: 枫,firstName: 冬}

map

  map: {k1: v1,k2: v2}

数组(list、set)

list:
    - a
    - b
    - c

行内写法

list:[a,b,c]
3.YAML配置文件值获取

Person类

//把组件加入到容器中
@Component
//告诉springboot 将本类的属性和配置文件中对应的配置进行绑定
//prefix 指定是配置文件中哪个属性下的配置进行绑定
@ConfigurationProperties(prefix = "person")  
public class Person {

    private String name;
    private Integer age;
    private String gender;

    private List list;
    private Map<String,Object> map;

    private Dog dog; //关联的Dog类

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

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

Dog类

public class Dog {
    private String name_dog;
    private String gender_dog;

    public String getName_dog() {
        return name_dog;
    }

    public void setName_dog(String name_dog) {
        this.name_dog = name_dog;
    }

    public String getGender_dog() {
        return gender_dog;
    }

    public void setGender_dog(String gender_dog) {
        this.gender_dog = gender_dog;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name_dog='" + name_dog + '\'' +
                ", gender_dog='" + gender_dog + '\'' +
                '}';
    }
}
server:
  port: 8055

person:
  name: Murphy
  age: 18
  gender: 未知
  dog:
    name_dog: Winter
    gender_dog: 公
  list:
    - 123
    - b
    - 456
  map: {k1: hi,k2: 你好}

测试类

// SpringBoot单元测试,可以在测试期间很方便的类似编码一样进行自动注入到容器的功能
@RunWith(SpringRunner.class)
@SpringBootTest
class LearnApplicationTests {

    @Autowired
    private Person person;

    @Autowired
    ApplicationContext ioc;

    @Test
    void contextLoads() {
        System.out.println(person);
    }
}

运行测试类
在这里插入图片描述
Perfect !!!
在这里插入图片描述

4.properties配置

将上面的yaml删了,打开application.properties配置,没有自己创建

配置application.properties

person.dog.name_dog= Winter
person.dog.gender_dog= 母
person.name = Murphy
person.age= 18
person.gender= 未知
person.list= a,b,c
person.map.k1= 123
person.map.k2= hhh

同样运行测试类
在这里插入图片描述
哎呦出现中文乱码,脑壳疼!

在这里插入图片描述
勾上这个在运行的时候转换为ascii码

5.@ConfigurationProperties和@Value区别

@value Spring底层注解
类似于:

<bean class="Person">
     <property name="name" value="Murphy" ></property>
 </bean>
  1. @ConfigurationProperties能够批量注入配置文件的属性。
    @Value只能一个个指定。

在这里插入图片描述

  1. @ConfigurationProperties支持松散绑定。
    @ConfigurationProperties(prefix =“person”),只需要指定一个前缀,就能绑定有这个前缀的所有属性值。
  2. @Value支持SpringEl的语法。@ConfigurationProperties不支持SpringEl的语法。

在这里插入图片描述

  1. @ConfigurationProperties还支持JSR303进行配置文件值及校验。例如:

在这里插入图片描述
注意加上@Validated 注解 启动校验

  1. @Value不支持复杂类型封装注解。
    如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value,如果我们专门编写了一个javabean和配置文件进行映射,就直接使用ConfigurationProperties;
    比如上面的map属性就不可用@Value
6.@PropertySource、@importResource、@Bean
  • @PropertySource(value = “classpath:application.yml”) 指定配置文件
  • @ImportResource 导入Spring配置文件(XML文件),让配置文件生效
  • @ConfigurationProperties(prefix = “person”) 默认全局配置文件
7.配置文件占位符

可用随机数:
${random.value} ${random.int} ${random.long} ${random.int(10)} ${random.int[1024,65536]}
占位符获取之前配置的值,如果没有可以用冒号指定默认值:
${person.aaa:abc} 没有aaa这个配置就会指定为abc

8.Profile多环境支持

当有多个配置文件时(application-xxx.properties/yml)可以在默认配置中激活使用其他文件

在这里插入图片描述
1.在properties为主配置文件时
使用spring.profiles.active: dev 激活dev配置文件

2.在yml为主配置文件时可以使用文档块模式,就不用写很多配置文件:
在这里插入图片描述
当指定激活prod时,运行后的端口就会变成prod块里的8022
3.可以用命令行指定参数:
java -jar 包 --spring.profiles.active: dev

9.配置文件加载位置

springboot启动后会默认扫描一下子位置的application.properties/yml 文件作为默认配置文件
– file:./config/
– file:./
– classpath:/config/
– classpath:/
优先级从高到低,全部路径下的配置文件都会被加载,优先级高的配置内容会覆盖优先级低的配置内容,高没有低有的也会被加载(互补配置)

10.外部配置加载顺序

可以查SpringBoot文档:
SpringBoot文档
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值