04-002 springboot的配置

1、配置文件

springboot使用一个全局配置文件
application.properties
application.yml

作用:修改springboot的自动配置的默认值,springboot底层配置好的可以在此修改。

YAML(YAML Ain’t Makeup Language)

YAML A Makeup Language:是一个标记语言
YAML isn’t Makeup Language:不是一个标记语言

标记语言:
以前的配置文件,大多用xxx.xml,
yaml以数据为中心,没有大量标签开闭,比xml更适合做配置文件

server:
  port: 8090

2、YAML语法

  1. 基本语法
    k: v(键值对,空格必须有)
    以空格的缩进来控制层级关系:只要左对齐数据,都是 同一层级的
    属性和值大小写敏感

2.值的写法
字面量:普通的值(数字,字符串,布尔值)
k: v 字面直接写;
字符串不用加"" 或者 ’ ’
“”:双引号,不会转义字符串中的特殊字符;特殊字符会作为本身想表示的意思 name: “tt \n ss” 输出tt 换行 ss
’ ':单引号;会转义特殊字符,特殊字符最终只是一个普通字符串
name: “tt \n ss” 输出tt \n ss

对象、map(属性和值)(键值对):
k: v
对象还是k: v的方式;注意缩进

friends:
	name:  zs
	age:  20

行内写法:

friends:{name: zs,age:  20}

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

pets:
-  cat
-  dog
-  pig

行内写法:

pets:[cat,dog,pig]

3、配置文件注入

配置文件

person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2019/01/01
  maps: {k1: v1,k2: v2}
  lists:
    - lisi
    - llliu
    - yy
  dog:
    name: gg
    age: 2

javaBean:

package com.magic.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Description 将配置文件的每个属性值映射到组件
 * @ConfigurationProperties:告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定
 * prefix = ""配置文件中哪个下面的所有属性一一映射
 *
 * 只有这个组件是容器中的组件,才能使用容器中提供的@ConfigurationProperties功能
 * @Author Chelsea
 * @Date 2020/1/10 17:34
 */

@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;


可以导入配置文件处理器,编写配置的时候有提示(lastName与last-name是一样的)

<!--        导入配置文件处理器,绑定后会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

同理application.properties的配置文件

person.last-name=tet
person.age=25
person.birth=2019/01/01
person.boss=true
person.maps.k1=v1
person.maps..k2=v2
person.lists=a,b.c
person.dog.name=gg
person.dog.age=2

@Value(“true”)
@Value("${person.last-name}")
@Value("#{11*2}")

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持

配置在yml还是properties都能获取到值;如果只是在某个业务中获取一下需要的值,使用@Value;如专门写个Javabean来映射配置文件中的值,用@ConfigurationProperties;默认从全局配置文件取值。

配置文件注入值数据校验

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
    @Email
    private String  lastName;

@PropertySource/@ImportResource

@PropertySource 指定注入的配置文件

@PropertySource(value = "classpath:person.properties")
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {

@ImportResource:导入spring的配置文件,让配置文件的内容生效;
springboot里面没有spring的配置文件,我自己编写的也不能自动识别;
想让spring配置文件生效,加载进来,@ImportResource标注在一个配置类上

@ImportResource(locations = {"classpath:beans.xml"})

springboot推给容器中添加组件的方式:推荐使用全注解的方式
1.配置类===spring配置文件
2.使用@Bean给容器中添加组件

@Configuration//指明当前类是一个配置类,就是来替代spring配置文件,以前<bean></bean>标签加组件
public class MyConfig {

    @Bean//将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
    public HelloService helloService(){
        System.out.println("bean");
        return new HelloService();
    }

}

4、配置文件占位符

随机数
random.value,{random.int},${random.long} , ${random.uuid},
randon.int(10),{random.int[1024,65536]}

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

person.dog.name=${person.last-name}_dog
person.dog.name=${person.hello:hi}_dog

5、profile

多环境支持
1.多profile文件
主配置文件编写时,文件名可以是application-{profile}.properties/yml,
默认用文件名application.properties的配置;

2.yml支持多文档块

---
server:
  port: 8081
spring:
  profiles: 
    a
---
server:
  port: 8052
spring:
  profiles: dev
---
server:
  port: 8083
spring:
  profiles: prod

3.激活指定profile
在application.properties文件中可以配置激活环境

  1. spring.profiles.active=dev
  2. 命令行方式激活: java -jar xxx.jar --spring.profiles.active=dev,或者如下图配置
    在这里插入图片描述
  3. 虚拟机参数设置
    在这里插入图片描述
    ps.在测试过程中发现properties比yml优先级高

6、配置文件的加载位置

file:./config/
file:./
calsspath:/config
classpath:/

以上安装优先级由低到高的顺序,所有位置的文件都会被加载,高优先级配置内容覆盖低优先级配置内容,可以互补配置

可以通过spring.config.location来改变默认配置文件位置
在运维时,可以使用命令行参数的形式,启动项目的时候指定配置文件的新位置,指定文件和默认加载的配置文件一起起作用,形成互补文件。 用Terminal这个便捷控制台,运行命令。
java -jar xxx.jar --spring.config.location=指定文件

7、外部配置的加载顺序

很多,目前关注下面的:(优先级从高到低)

  1. 命令行参数;
  2. jar包外的application-{profile}.properties或application.yml(带spring.profile)配置文件
  3. jar包内的application-{profile}.properties或application.yml(带spring.profile)配置文件
    优先加载带profile的再来加载不带profile的
  4. jar包外的application.properties或application.yml(带spring.profile)配置文件
  5. jar包内的application.properties或application.yml(带spring.profile)配置文件

8、自动配置原理

可以配置参数参考文档.
目前大概理解,后续深入。
自动配置原理.

学习整理于springboot

发布了53 篇原创文章 · 获赞 0 · 访问量 379

猜你喜欢

转载自blog.csdn.net/weixin_40778497/article/details/103927300
今日推荐