二、Spring Boot配置

一、配置文件


– Spring Boot使用一个全局的配置文件

• application.properties

• application.yml


– 配置文件放在src/main/resources目录或者类路径/config下


– .yml是YAML(YAML Ain't Markup Language)语言的文件,以数据为中 心,比json、xml等更适合做配置文件

• http://www.yaml.org/ 参考语法规范


– 全局配置文件的可以对一些默认配置值进行修改

二、YAML语法
 

1、YAML基本语法

– 使用缩进表示层级关系

– 缩进时不允许使用Tab键,只允许使用空格。

– 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

– 大小写敏感


2、YAML 支持的三种数据结构

– 对象:键值对的集合

– 数组:一组按次序排列的值

– 字面量:单个的、不可再分的值 

YAML常用写法

– 对象(Map)

• 对象的一组键值对,使用冒号分隔。如:username: admin

• 冒号后面跟空格来分开键值;

• {k: v}是行内写法  

数组

– 一组连词线(-)开头的行,构成一个数组,[]为行内写法

– 数组,对象可以组合使用

 

     – 复合结构。以上写法的任意组合都是可以
     – 字面量

• 数字、字符串、布尔、日期

• 字符串

     – 默认不使用引号

     – 可以使用单引号或者双引号,单引号会转义特殊字符

     – 字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。

     – 文档

• 多个文档用 - - - 隔开  

注意: Spring Boot使用 snakeyaml 解析yml文件; https://bitbucket.org/asomov/snakeyaml/wiki/Documentation#markdown-header-yamlsyntax 参考语法 

 

 

Pets{name='zhangsan \n', username='张三', age=18, pet={name=小狗, gender=male}, animal=[dog, cat, fish], interests=[足球, 篮球], friends=[[zhangsan is my best friend, lisi ]], childs=[{age=18, name=xiaozhang}, {pets={1=b, 0=a}, name=xiaoli}, {age=18, name=lisi}]} 

三、配置文件值注入  

• @Value和@ConfigurationProperties为属性注值对比

 

 • 属性名匹配规则(Relaxed binding)

     – person.firstName:使用标准方式

     – person.first-name:大写用

     – person.first_name:大写用_

     – PERSON_FIRST_NAME:

• 推荐系统属性使用这种写法

• @ConfigurationProperties 

     – 与@Bean结合为属性赋值

     – 与@PropertySource(只能用于properties文件)结合读取指定文件

• @ConfigurationProperties Validation  

      – 支持JSR303进行配置文件值校验;

• @ImportResource读取外部配置文件 

四、配置文件占位符 

• RandomValuePropertySource:配置文件中可以使用随机数  

     ${random.value}、${random.int}、${random.long}

     ${random.int(10)}、${random.int[1024,65536]}

 • 属性配置占位符

 

     – 可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能用)。

     – ${app.name:默认值}来指定找不到属性时的默认值 

五、 Profile  

Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、 指定参数等方式快速切换环境  

1、多profile文件形式:  

      – 格式:application-{profile}.properties/yml:

                   • application-dev.properties、application-prod.properties  

2、多profile文档块模式:  

 

3、激活方式:  

     – 命令行 --spring.profiles.active=dev

     – 配置文件 spring.profiles.active=dev

     – jvm参数 –Dspring.profiles.active=dev 

六、配置文件加载位置 

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

   – file:./config/

   – file:./

   – classpath:/config/

   – classpath:/

   – 以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先 级配置内容会覆盖低优先级配置内容。

   – 我们也可以通过配置spring.config.location来改变默认配置 

七、外部配置加载顺序 

Spring Boot 支持多种外部配置方式 

这些方式优先级如下:  

     1. 命令行参数

     2. 来自java:comp/env的JNDI属性

     3. Java系统属性(System.getProperties())

     4. 操作系统环境变量

     5. RandomValuePropertySource配置的random.*属性值

     6. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

     7. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

     8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件

     9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件

     10. @Configuration注解类上的@PropertySource

     11. 通过SpringApplication.setDefaultProperties指定的默认属性 

 八、自动配置原理

1、可以查看HttpEncodingAutoConfiguration 

2、通用模式  

      – xxxAutoConfiguration:自动配置类

      – xxxProperties:属性配置类

      – yml/properties文件中能配置的值就来源于[属性配置类]  

3、几个重要注解  

      – @Bean

      – @Conditional  

4、--debug=true查看详细的自动配置报告 

@Conditional扩展 

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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值