SpringBoot配置文件

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

  • application.properties
  • application.yml

  配置文件的作用:修改SpringBoot自动配置的默认值; SpringBoot在底层就自动配置好;

配置文件加载位置

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

 –file:./config/
–file:./
–classpath:/config/
–classpath:/ 优先级由高到底,高优先级的配置会覆盖低优先级的配置; 

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

  2、可以通过spring.config.location来改变默认的配置文件位置

    项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

    命令:java -jar spring-boot-config-1.0-SNAPSHOT.jar --spring.config.location=application.properties

  3、外部配置加载顺序

    SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

 1.命令行参数 所有的配置都可以在命令行上进行指定
java -jar spring-boot-config-1.0-SNAPSHOT.jar --server.port=8087 -- server.context-path=/abc 多个配置用空格分开; --配置项=值
2.来自java:comp/env的JNDI属性
3.Java系统属性(System.getProperties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值由jar包外向jar包内进行寻找; 优先加载带profile
6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 再来加载不带profile
8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
10.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性 所有支持的配置加载来源;

  参考官网地址:https://docs.spring.io/spring-boot/docs/2.1.8.RELEASE/reference/htmlsingle/#boot-features-external-config

YAML简介

  AML(YAML Ain't Markup Language)

  YAML A Markup Language:是一个标记语言

  YAML isn't Markup Language:不是一个标记语言;

  标记语言:以前的配置文件; 大多都使用的是 xxxx.xml文件; YAML:以数据为中心,比json、xml等更适合做配置文件;

  YAML:配置例子

 server:
port: 8081

  properties文件:

 server.port= 8081

  YAML语法

  1、基本语法

    k:(空格)v

    表示一对键值对(空格必须有); 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的;

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

 server:
port: 8081
path: /hello

  2、值的写法

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

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

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

    "":双引号; 不会转义字符串里面的特殊字符; 特殊字符会作为本身想表示的意思 name: "zhangsan \n lisi":输出;zhangsan 换行 lisi

    '':单引号; 会转义特殊字符,特殊字符最终只是一个普通的字符串数据 name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

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

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

    对象还是k: v的方式

 friends:
lastName: zhangsan
age: 20

    行内写法:

 friends: {lastName:zhangsan, age:18}
    数组(List、Set):

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

 pets:
‐cat
‐dog
‐pig

    行内写法

 pets: [cat,dog,pig]

配置文件值注入

    配置文件

 person:
lastName: hello
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists:
‐ lisi
‐ zhaoliu
dog:
name: 小狗
age: 12

    javaBean

 /**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties 将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person" : 配置文件中哪个下面的所有属性
* 只有这个组件是容器中的组件,此啊能使用容器提供的@ConfigurationProperties功能
*
*/
// @PropertySource(value = {"classpath:person.properties"})
@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;

    注意:导入配置文件处理器,即pom文件中增加下面依赖,以后在编写配置文件时就有提示了

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

    a、*.properties文件乱码问题,idea中默认utf-8可能会乱码,调整settings

      

    b、@Value获取值和@ConfigurationProperties获取值比较

      

 

@ConfigurationProperties

@Value

功能

批量注入配置文件中的属性

一个个指定

松散绑定(松散语法)

支持

不支持

SpEL

不支持

支持

JSR303数据校验

支持

不支持

复杂类型封装

支持

不支持

    

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

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

      如果说,专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

    c、配置文件注入值数据校验

 @Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person { //lastName必须是邮箱格式
@Email //@Value("${person.last‐name}")
private String lastName;
//@Value("#{11*2}")
private Integer age;
//@Value("true")
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;

    d、@PropertySource&@ImportResource&@Bean

      @PropertySource: 加载指定的配置文件;

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

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

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

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

 // 导入Spring的配置文件让其生效
@ImportResource(locations={"classpath:beans.xml"})

    SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式

    1、配置类@Configuration------>Spring配置文件

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

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

配置文件占位符

    1、随机数

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

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

 person.last‐name=张三${random.uuid} 2 person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15

Profile文件

    1、多Profile文件

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

      默认使用application.properties的配置;

    2、yml支持多文档块方式

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

    3、激活指定profile文件

      a、在配置文件中指定 spring.profiles.active=dev

      b、命令行: java -jar spring-boot-1.0-SNAPSHOT.jar --spring.profiles.active=dev; 可以直接在测试的时候,配置传入命令行参数

      c、虚拟机参数; -Dspring.profiles.active=dev

      

【SpringBoot】SpringBoot配置文件及YAML简介(三)的更多相关文章

  1. SpringBoot 之 配置文件、yaml语法、配置注入、松散绑定

    配置文件 SpringBoot 有两种配置文件格式,二选一即可,官方推荐 yaml: application.properties key=value的格式 application.yaml key: ...

  2. Intelij IDEA创建SpringBoot项目 - 配置文件的解释

    springboot介绍 官网:spring.io Spring Boot is designed to get you up and running as quickly as possible, ...

  3. SpringBoot 属性配置文件数据注入配置和yml与properties区别

    前言 我们知道SpringBoot 通过配置类来解放一堆的xml文件配置,通属性配置文件,来进行,系统全局属性配置,这样极大的简化了我们开发过程,java web 也可以甜甜的从此 快速配置 Spri ...

  4. [SpringBoot] - 了解什么是SpringBoot,使用SpringBoot的配置文件

    首先明白Spring是什么,Spring是Java开发的一个框架,为了方便简化Java开发. 什么是注解(注解式开发)? Spring的常用注解有哪些? 假如用SpringBoot构建一个网站程序,应 ...

  5. SpringBoot读取配置文件源码探究

    1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...

  6. SpringBoot系列之@PropertySource用法简介

    SpringBoot系列之@PropertySource用法简介 继上篇博客:SpringBoot系列之@Value和@ConfigurationProperties用法对比之后,本博客继续介绍一下@ ...

  7. SpringBoot:配置文件及自动配置原理

    西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...

  8. springboot指定配置文件运行

    1.springboot指定配置文件运行 创建三个配置文件如下: application.properties内容如下: spring.profiles.active=rabbit如上配置,在运行时就 ...

  9. SpringBoot获取配置文件,就这么简单。

    在讲SpringBoot 获取配置文件之前我们需要对SpringBoot 的项目有一个整体的了解,如何创建SpringBoot 项目,项目结构等等知识点,我在这里就不一一讲述了,没有学过的小伙伴可以自 ...

随机推荐

  1. XXX接口自动化测试方案

    XXX接口自动化测试方案 1.引言 1.1 文档版本 版本 作者 审批 备注 V1.0 XXXX 创建测试方案文档 1.2 项目情况 项目名称 XXX 项目版本 V1.0 项目经理 XX 测试人员 X ...

  2. 前端重定向,index.html文件被浏览器缓存,导致整个应用都是旧的

    解决方法:https://github.com/ant-design/ant-design-pro/issues/1365#issuecomment-384496088

  3. Does Swift support aspect oriented programming?

    The foundation of Aspect Oriented Programming is the intercept pattern. We start with a crosscutting ...

  4. org.springframework.security.access.AccessDeniedException: Access is denied

    org.springframework.security.access.AccessDeniedException: Access is denied at org.springframework.s ...

  5. python--面向对象编程之学生选课系统练习

    1.系统目录结构 文件夹注解: bin--系统管理员和学生的主程序代码 config--系统的配置文件 db--系统的数据文件 admin--管理员的数据文件 student--学生的数据文件 lib ...

  6. [RN] React Native 仿美团下拉筛选菜单控件

    React Native 仿美团下拉筛选菜单控件 演示效果如下: 使用方法如下: 1.安装 npm install react-native-dropdownmenus --save react-na ...

  7. STL next_permutation 全排列

    调用方法: ]={,,,}; )){ ;i<;i++) printf("%d ",arr[i]); puts(""); } 测试效果: 注:可以看到1 2 ...

  8. A1113 | Integer Set Partition (25)

    太简单了 #include <stdio.h> #include <memory.h> #include <math.h> #include <string& ...

  9. 洛谷 P1825 【[USACO11OPEN]玉米田迷宫Corn Maze】

    P1825 传送门 简单的题意 就是一个有传送门的迷宫问题(我一开始以为是只有1个传送门,然后我就凉了). 大体思路 先把传送门先存起来,然后跑一下\(BFS\). 然后,就做完了. 代码鸭 #inc ...

  10. 【CF55D】Beautiful numbers

    [CF55D]Beautiful numbers 题面 洛谷 题解 考虑到如果一个数整除所有数那么可以整除他们的\(lcm\),而如果数\(x\)满足\(x\bmod Lcm(1,2...,9)=r\ ...