SpringBoot-配置
创始人
2024-01-28 12:48:33
0

目录

起步依赖原理分析

配置文件分类

YAML

YAML:基本语法

YAML:数据格式

YAML:参数引用

读取配置内容

profile

Profile-小结

内部配置加载顺序

外部配置加载顺序


  • 起步依赖原理分析

  • 在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本
  • 在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程
  • 我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题
  • 配置文件分类

  • SpringBoot是基于约定的,所以很多配置都有默认值
  • 但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置
  • properties:
  • server.port=8080
  • yml:
  • server:
    • port:8080
  • 小结
  • SpringBoot提供了2种配置文件类型:properties和yml/yaml
  • 默认配置文件名称:application
  • 在同一级目录下优先级为:properties>yml>yaml
  • YAML

  • YAML全称是YAML Ain't Markup Language
  • YAML是一种直观的能够被电脑识别的的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的
  • 可以被支持YAML库的不同的编程语言程序导入,比如:C/C++,Ruby,Python,Java,Perl,C#,PHP等
  • YML文件是以数据为核心的,比传统的xml方式更加简洁
  • YAML文件的扩展名可以使用.yml或者.yaml
  • properties:
  • server.port=8080
  • server.address=127.0.0.1
  • xml:
    • 8080
    • 127.0.0.1
  • yml:
  • server:
    • port:8080
    • address:127.0.0.1
  • 简洁,以数据为核心
  • YAML:基本语法

  • 大小写敏感
  • 数据值前边必须有空格,作为分隔符
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略
  • server:
    • port:8080
    • address:127.0.0.1
  • name:abc
  • YAML:数据格式

  • 对象(map):键值对的集合
  • person:
    • name:zhangsan
  • #行内写法
  • person: {name: zhangsan}
  • 数组:一组按次序排列的值
  • address:
    • - beijing
    • - shanghai
  • #行内写法
  • address: [beijing,shanghai]
  • 纯量:单个的、不可再分的值
  • msg1: 'hello \n world' #单引忽略转义字符
  • msg2: "hello \n world" #双引识别转义字符
  • YAML:参数引用

  • name: list
  • person:
    • name: ${name} #引用上边定义的name值
  • 读取配置内容

  • 1.@Value
  • 2.Environment
  • 3.@ConfigurationProperties
  • @Value
  • server:port: 8082name: abc
    # 对象
    person:name: zhangsanage: 20address:- beijing- shanghai# 对象行内写法
    person2: {name: zhangsan,age: 20}# 数组
    address:- beijing- shanghai# 数组行内写法
    address2: [beijing,shanghai]# 纯量
    msg1: 'hello \n world' # 不会识别转义字符,会原样输出
    msg2: "hello \n world" # 会识别转义字符
  • Environment
  • @ConfigurationProperties
  • @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {private String name;private int age;private String[] address;public String[] getAddress() {return address;}public void setAddress(String[] address) {this.address = address;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", address=" + Arrays.toString(address) +'}';}
    }
  • @RestController
    public class HelloController {@Value("${name}")private String name;@Value("${person.name}")private String name2;@Value("${person.age}")private String age;@Value("${address[0]}")private String address1;@Value("${msg1}")private String msg1;@Value("${msg2}")private String msg2;@Autowiredprivate Environment env;@Autowiredprivate Person person;@RequestMapping("/hello")public String hello(){System.out.println(name);System.out.println(name2);System.out.println(age);System.out.println(address1);System.out.println(msg1);System.out.println(msg2);System.out.println("-----------------");System.out.println(env.getProperty("person.name"));System.out.println(env.getProperty("address[0]"));System.out.println("-----------------");System.out.println(person);String[] address = person.getAddress();for(String s : address){System.out.println(s);}return "hello SpringBoot";}
    }
  • profile

  • 我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境
  • 比如:开发、测试、生产等
  • 其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦
  • profile功能就是来进行动态配置切换的
  • (1)profile配置方式
    • 多profile文件方式
    • yml多文档方式
  • (2)profile激活方式
    • 配置文件
    • 虚拟机参数
    • 命令行参数
  • Profile-小结

  • (1)profile是用来完成不同环境下,配置动态切换功能的
  • (2)profile配置方式
    • 多profile文件方式:提供多个配置文件,每个代表一种环境
      • application-dev.properties/yml 开发环境
      • application-test.properties/yml 测试环境
      • application-pro.properties/yml 生产环境
    • yml多文档方式:
      • 在yml中使用---分隔不同配置
  • (3)profile激活方式
    • 配置文件:在配置文件中配置:spring.profiles.active=dev
    • 虚拟机参数:在VM options指定:-Dspring.profiles.active=dev
    • 命令行参数:java-jar xxx.jar --spring.profiles.active=dev
  • 内部配置加载顺序

  • Springboot程序启动时,会从以下位置加载配置文件:
  • 1.file:./config/:
  • 当前项目下的/config目录下
  • 2.file:./:
  • 当前项目的根目录
  • 3.classpath:/config/:
  • classpath的/config目录
  • 4.classpath:/:
  • classpath的根目录
  • 加载顺序为上文的排列顺序,高优先级配置的属性会生效
  • 外部配置加载顺序

  • 以下优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
  • 1-命令行参数:所有的配置都可以在命令行上进行指定;
  • 2-来自java:comp/env的JNDI属性;
  • 3-Java系统属性(System.getProperties());
  • 4-操作系统环境变量 ;
  • 5-jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  • 6-jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 再来加载不带profile
  • 7-jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  • 8-jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  • 9-@Configuration注解类上的@PropertySource
  • 根据第7条,我们只要在jar包同目录外放置一个application.properties配置文件,就会起作用,同时这个配置文件的优先级还比jar内的高,这个配置很有作用

相关内容

热门资讯

苏州社保公司和个人各承担多少,...   各地的社保缴纳的比例都是不一样的,也不是国家整个进行死规定的。而且,每年都可能做一些小改变,都是...
低保政策最新2022,低保户有...   就算现在的每个人的生活已经过得不错了,但是还是有些人贫穷的。就算是在努力缩短贫富差距,但是贫富还...
杭州2022社保缴费基数最新通...   社保的缴纳主要是通过工作单位和个人共同缴纳的,缴纳的基数是按照员工的工资来制定的,至于交多少钱还...
城镇居民养老保险交15年后每月...   现在不管是在城镇还是在农村都是有缴纳社保的,至于为什么缴纳社保是因为能给我们带来很大的权益保障,...
儿童住院医保怎么报销?2022...   儿童在小的时候是最容易生病的,因为发育不健全、体质比较弱,经常生病也是经常的事情,也是因为这样每...
青岛社保缴费基数,2022青岛...   多地都发表了自己的社保基数上调的标准公示,社保基数上调对我们也是有好处的。之后的报销和账户余额上...
美团外卖商家怎么加入,店铺入驻...   美团应该是现在我们点外卖平台最频繁了,一般大家手机下载的无非就是美团或者是饿了么等外卖软件了。那...
2022年各个快递费用价格查询...   现在快递行业发展是非常迅速的,特别是电商快速发展这几年,快递也随之流行起来,这两个是必不可少的。...
上海失业金领取条件及标准202...   失业金对大家来说还是比较重要的,失业后在还没有找到工作的情况下是可以申请失业金的,这也是国家给每...
农村居民养老保险怎么买。怎么缴...   我国是农业型大国,所以有很大一部分是农民。对于农村建设是不能马虎的,乡村居民的生活质量提高,也是...