配置文件properties比yml优先级高

SpringBoot使用一个全句的配置文件,配置文件名是固定的;

application.properties

application.yml

配置文件的作用:修改SpringBoot自动配置的默认值,SpringBoot在底层都给我们自动配置好了。

YAML, 是/不是一个标记语言

标记语言:

​ 以前的配置文件:xxx.

​ yaml:以数据为中心,比json、 等更适合做配置文件。

2、YAML语法:

1.基本语法

​ k: 空格V:表示一对键值对(空格必须有):

​ 以空格的缩进来控制层级关系

server:
  port: 8095
  path: /hello

属性和值也是大小写敏感;

2.值的写法

字面量:普通的值(数字、字符串,布尔)

​ k: v: 字面直接来写;

​ 字符串默认不用加上单引号或者双引号;

​ \'\':会转义特殊字符,特殊字符会被转为一个普通的字符串输出

​ name: \"zhangsan \\n lisi\"

​ 输出:zhangsan \\n lisi

​ \"\":不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思

​ name: \"zhangsan \\n lisi\"

​ 输出:zhangsan

​ lisi

对象(属性和值)(键值对):

​ k: v :在下一行来写对象的属性和值的关系,注意缩进

​ 对象还是k: v的方式

friends:
    lastName: zhangsan
    age: 20

数组(list、set):

用-值表示数组中的一个元素

pets:
    - cat
    - dog
    - pig
pets: [cat,dog,pig] 

3.配置文件值注入

配置文件yml

person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2018/10/10
  maps: {
          k1: v1,
          k2: 12,
          k3: 20
  }
  lists:
    - lisi
    - wangwu
  dog:
    name: 小狗
    age: 2

javaBean:

/**
*通过@ConfigurationProperties(prefix = \"person\")注入
*/
@Component
@ConfigurationProperties(prefix = \"person\")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boos;
    private Date birth;

    private Map<String, > maps;
    private List< > lists;
    private Dog dog;

我们可以导入pom. 配置文件处理器,这样编写yml就会有提示

<dependency>
    <groupId>org.spring work.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
@Value(\"${person.last-name}\")
private String lastName;
@Value(\"#{11*2}\")
private Integer age;
@Value(\"true\")
private Boolean boos;

1.idea中yml配置文件默认utf-8有可能乱码

2.@value获取值与@configurationProperties获取值比较

  @configurationProperties @value
功能 批量注入配置文件中的属性 一个个指定
松散绑定 支持 不支持
SpEL 不支持 支持(#/${}...)
JSR303数据校验 支持 不支持
  支持 不支持

配置文件yml还是properties他们都能获取到值。

如果说,我们只是在某个业务逻辑中,需要获取一下配置文件中的某项值,我们使用@value

如果为list或map或专门编写了一个javaBean来和配置文件进行映射,使用@ConfigurationProperties。

3.配置文件注入值数据校验

@ConfigurationProperties(prefix = \"person\")
@Validated

4.@PropertySource与ImportResource

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties: 告诉springboot将奔雷中的所有属性和配置文件中的相关的配置进行绑定
 *      prefix = \"persion\" : 配置文件中哪个下面的所有属性进行一一映射
 * 只有这个组件是容器中的组件,才能使用容器提供的ConfigurationProperties功能
 * @ConfigurationProperties(prefix = \"person\")默认从全局配置文件中获取值;
 */
@PropertySource(value = {\"classpath:person.properties\"})
@Component
@ConfigurationProperties(prefix = \"person\")
@Validated
public class Person {
//    @Value(\"${person.last-name}\")
    private String lastName;
//    @Value(\"#{11*2}\")
    private Integer age;
//    @Value(\"true\")
    private Boolean boos;
    private Date birth;

    private Map<String, > maps;
    private List< > lists;
    private Dog dog;

@ImportResource: 导入Spring的配置文件,让配置文件里面的内容生效;

SpringBoot里面没有Spirng的配置文件,我们自己编写的配置文件,也不能自动识别;

想让Spring的配置文件生效,加载进来@importResource,标注在一个配置类上

@ImportResource(locations = {\"classpath:beans. \"})
<?  version=\"1.0\" encoding=\"UTF-8\"?>
<beans  ns=\"http://www.spring work.org/schema/beans\"
        ns:xsi=\"http://www.w3.org/2001/ Schema-instance\"
       xsi:schemaLocation=\"http://www.spring work.org/schema/beans http://www.spring work.org/schema/beans/spring-beans.xsd\">
    <bean id=\"helloService\" class=\"com.better.springhelloword.service.HelloService\"></bean>
</beans>

SpringBoot推荐给容器中添加组件的方式:

1.配置类===Spring配置文件

2.使用@Bean给容器中添加组件

/**
 *@Configuration:指明当前类是一个配置类,就是来替代之前的Spring配置文件
 * 在配置文件中用<bean><bean/> 标签添加组件
 */
@Configuration
public class MyAppConfig {
    //将方法的返回值添加到容器中
    @Bean
    public HelloService helloService(){
        System.out.println(\"配置类:\");
        return new HelloService();
    }
}

4、配置文件占位符

1.随机数

person.last-name=李四${random.uuid}
person.age=${random.int}

2.占位符获取之前的配置的值,如果没有可以用:指定默认值

person.dog.name=${person.last-name}_dog

person.dog.name=${person.hello:hello}_dog

5、Profile

1、多Profile文件

我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml

2、yml支持多文档块方式

server:
  port: 8095
spring:
  profiles:
    active: prod
---
server:
  port: 8080
spring:
  profiles: dev
---
server:
     port: 8081
spring:
  profiles: prod
收藏 打印