Spring Boot系列笔记--配置文件

一、yaml语法

  1. 基本语法
    K: V:后必须跟一个空格;
    通过空格缩进来控制层级
    server:
        port: 8081
        path: /hello
    
  2. 字面量写法
    字符串默认不用加上单引号或者双引号;
    "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
    name: "zhangsan \n lisi" 输出;zhangsan 换行 lisi
    '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
    name: 'zhangsan \n lisi' 输出;zhangsan \n lisi
  3. 对象、Map写法
    friends:
    	lastname: zhangsan
    	age: 39
    ---------------
    #行内写法
    friends: {
          
          lastname: zhangsan, age: 39}
    
  4. 数组、List、Set写法
    pets:
    	- cat
    	- dog
    	- pig
    ----------------
    # 行内写法
    pets: [cat, dog, pig]
    

二、配置文件值注入

  1. 现在pom文件里导入依赖,在配置文件显示提示
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-configuration-processor</artifactId>
    	<optional>true</optional>
    </dependency>
    
  2. 编写JavaBean
    @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;
        //Getter、Setter方法
    }
    
  3. yaml配置文件赋值
    person:
        lastName: hello
        age: 18
        boss: false
        birth: 2017/12/12
        maps: {
          
          k1: v1,k2: 12}
        lists:
          - lisi
          - zhaoliu
        dog:
          name: 小狗
          age: 12
    
  4. @ConfigurationProperties(prefix = "person")的作用是将配置文件中配置的属性和这个组件中的属性进行映射,因此必须加上@Component将该组件注入到容器中
  5. properties配置文件中文乱码
    在这里插入图片描述

三、@PropertySource、@ImportResource

  1. @PropertySource:加载指定的配置文件
    @PropertySource(value = {"classpath:person.properties"})
  2. @ImportResource:SpringBoot中没有Spring配置文件,需要导入
    @ImportResource(locations = {"classpath:beans.xml"})
  3. SpringBoot推荐的给容器中添加组件的方式:全注解
    用配置类来代替配置文件
    @Configuration
    public class MyAppConfig {
          
          	
        //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
        @Bean
        public HelloService helloService(){
          
          
            return new HelloService();
        }
    }
    

四、配置文件占位符

  1. 随机数
    在这里插入图片描述
  2. 获取之前的值
    user.name = zhangsan
    user.info = ${user.name}_18
    
  3. 如果没有可以指定
    person.dog.name=${person.hello:hello}_dog
    

五、Profile

  1. 可以写多个主配置文件:application-{profile}.properties/yml,默认使用application.properties的配置,也可以在application.properties中指定
    server.port=8080
    spring.profiles.active=dev
    

在这里插入图片描述
2. yaml支持多文档块

	server:
	  port: 8081
	spring:
	  profiles:
	    active: prod
    
	---
	server:
	  port: 8083
	spring:
	  profiles: dev
	
	---
	server:
	  port: 8084
	spring:
	  profiles: prod  #指定属于哪个环境

六、配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

–file:./config/

–file:./

–classpath:/config/

–classpath:/

优先级由高到低,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置

七、自动配置

  1. SpringBoot启动会加载大量的自动配置类
  2. 看我们需要的功能有没有SpringBoot默认写好的自动配置类
  3. 看这个自动配置类中到底配置了哪些组件(只要我们要用的组件有,我们就不需要再来配置了)
  4. 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值

八、@Conditional派生注解

作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效

@Conditional扩展注解 作用(判断是否满足当前指定条件)
@ConditionalOnJava 系统的java版本是否符合要求
@ConditionalOnBean 容器中存在指定Bean;
@ConditionalOnMissingBean 容器中不存在指定Bean;
@ConditionalOnExpression 满足SpEL表达式指定
@ConditionalOnClass 系统中有指定的类
@ConditionalOnMissingClass 系统中没有指定的类
@ConditionalOnSingleCandidate 容器中只有一个指定的Bean,或者这个Bean是首选Bean
@ConditionalOnProperty 系统中指定的属性是否有指定的值
@ConditionalOnResource 类路径下是否存在指定资源文件
@ConditionalOnWebApplication 当前是web环境
@ConditionalOnNotWebApplication 当前不是web环境
@ConditionalOnJndi JNDI存在指定项

九、自动配置报告

  • 自动配置类必须在一定的条件下才能生效
  • 在properties配置文件中配置debug=true来让控制台打印自动配置报告

猜你喜欢

转载自blog.csdn.net/weixin_44863537/article/details/108967300