原文地址

目录

概述

1. 配置文件作用

2.配置文件位置

3.配置文件的定义

3.1如果是定义普通变量(数字 字符串 布尔)

3.2如果是定义对象、Map

3.3如果是定义数组

4.配置文件的使用

4.1定义一个部门类和一个person类

4.2书写配置文件

4.3将配置文件属性的值绑定到指定类的属性上

4.4加载指定位置的配置文件

5.配置文件中使用占位符

6.Profile多环境配置

7.配置文件的位置

8.Springboot自动配置的原理


概述

Springboot开发中很重要的一句话就是约定大于配置,有很多配置都有默认值,我们使用即可。但是如果要根据自己的需求替换默认配置的话,可以通过配置文件修改。

1. 配置文件作用

主要用来修改Boot中相关默认的配置,有application.properties或者application.yml(application.yaml)两种配置方式进行配置。

2.配置文件位置

SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件

3.配置文件的定义

对于application.properties配置文件,我们只需通过如下类似的键值对进行配置相关参数即可,这里主要看下yml方式要注意的地方

server.port=8080

在yml中如何定义配置,格式如下

server:
  port: 8080

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

3.1如果是定义普通变量(数字 字符串 布尔)

直接使用k: v:书写即可,比如 age: 14

如果是字符串,双引号中的特殊字符会表达本身想表示的意思,单引号中的特殊字符将作为普通字符输出

name: "zhangsan \n lisi" 则输出 zhangsan 换行lisi

name: 'zhangsan \n lisi'  则输出 zhangsan \n lisi

3.2如果是定义对象、Map

Person:
  name: 李四
  age: 14
行内写法
Person: {name: 李四,age: 14}

3.3如果是定义数组

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

pets:
  -cat
  -dog
行内写法
pets: {cat,dog}

4.配置文件的使用

4.1定义一个部门类和一个person类

4.2书写配置文件

person:
  id: 1
  name: lisi
  age: 12
  flag: true
  maps: {k1: v1,k2: v2}
  lists:
    - cat
    - dog
  department:
    id: 1
    name: 开发部门

4.3将配置文件属性的值绑定到指定类的属性上

要能绑定配置文件中的属性,只有使用注解@Configuration或者@Component标注让一个类成为容器中的组件才可以绑定属性,不管是yml还是properies配置文件,读取里面的值绑定到属性的方式有两种。

第一种:使用@ConfigurationProperties(prefix = "person")注解,其中的prefix表示这个前缀下面的所有属性

第二种:使用@value()注解,括号中可以是字面量、${配置文件中的值}、#{SpEL表达式},

测试

注意:

1. 使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法

2.绑定的时候导入下面依赖代码自动提示

3.两种方式比较

4.将上面yml文件的person配置换成properties配置,同样绑定成功

person.id=1
person.name=zhangsan
person.age=13
person. maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.department.id=2
person.department.name=开发部门

4.4加载指定位置的配置文件

上面两种方式读取的配置文件默认都是全局的即application配置文件,但是所有的配置都写在全局配置文件中就显得很乱,可以单独自己的配置文件,使用@PropertySource注解

5.配置文件中使用占位符

#可以使用随机数
person.id=1${random.uuid}
#可以使用前面配置过的属性
person.name=zhangsan${server.port}
#可以使用自己配置过的属性
person.age=13${person.id}

常用的随机数

6.Profile多环境配置

当我们的应用需要部署到不同的运行环境时,一些配置细节通常会有所不同,最简单的比如日志,生产环境下会将日志级别设置为warn或者更高级别的,并将日志写入日志文件,但是开发环境下需要将日志级别设置为DUBUG,日志输出到控制台即可,如果按照以前的做法,每次发布的时候替换掉配置文件,这样太麻烦了Springboot的Profile就解决了这一问题,命令带参数就搞定

如下图我们可以针对不同环境定义对应的配置文件

在主配置文件中通过spring.profiles.active=dev或者spring.profiles.active=pro选择即可

除了上面这种选择性引入对应的配置文件,常见的其他几种方式如下

1.运行的时候Edit配置文件

2.打包项目的时候

java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

7.配置文件的位置

项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默
认加载的这些配置文件共同起作用形成互补配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties

这种写法会形成互补配置,特别是在运维的时候,可以运行的时候使用外部一些配置。

比如我在服务器发布了项目wxcrawler

要使用外置配置文件就很简单了,在jar所在目录新建config文件夹,然后放入配置文件,或者直接放配置文件在jar目录

8.Springboot自动配置的原理

我们回顾目录4的知识,可以看到我们在配置文件中配置了Person相关属性的值,要想使用这些值必需定义一个Person的组件,但是我们直接可以使用类似server.port=8080相关的配置,而不用定义相关的组件类,因为boot已经帮我们定义了常见的组件配置类,我们只需定义这配置类的属性值,会自动绑定。那我们到底可以配置哪些类似server.port=8080参数呢,可以查看官网说明

https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference/htmlsingle/#common-application-properties

公众号 java一号 更多java实战项目资料、技术干活。更重要的是小猿愿成为你编程路上的一个朋友!

用心写好每一篇文章,真心对待每一个读者

文章首发地址: www.javayihao.top

首发公众号: java一号

springboot(3)——配置文件和自动配置原理详细讲解的更多相关文章

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

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

  2. SpringBoot嵌入式Tomcat的自动配置原理

    在读本篇文章之前如果你读过这篇文章SpringBoot自动装配原理解析应该会更加轻松 准备工作 我们知道SpringBoot的自动装配的秘密在org.springframework.boot.auto ...

  3. Spring Boot面试杀手锏————自动配置原理

    转:https://blog.csdn.net/u014745069/article/details/83820511 引言不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技 ...

  4. 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)

    1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置  1.命令行参数 所有的配置都可以在命令行上进行指定 ...

  5. 这样讲 SpringBoot 自动配置原理,你应该能明白了吧

    https://juejin.im/post/5ce5effb6fb9a07f0b039a14 前言 小伙伴们是否想起曾经被 SSM 整合支配的恐惧?相信很多小伙伴都是有过这样的经历的,一大堆配置问题 ...

  6. SpringBoot自动配置原理

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面Spring的文章(以学习的顺序排好): S ...

  7. Springboot 系列(三)Spring Boot 自动配置原理

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 关于配置文件可以配置的内容,在 Spring ...

  8. SpringBoot的自动配置原理过程解析

    SpringBoot的最大好处就是实现了大部分的自动配置,使得开发者可以更多的关注于业务开发,避免繁琐的业务开发,但是SpringBoot如此好用的 自动注解过程着实让人忍不住的去了解一番,因为本文的 ...

  9. 3. SpringBoot ——自动配置原理浅析

    SpringBoot的功能之所以强大,离不开它的自动配置这一大特色.但估计很多人只是知其然而不知其所以然.下面本人对自动配置原理做一个分析: 在使用SpringBoot时我们通过引入不同的Starte ...

随机推荐

  1. python3连接MySQL实现增删改查

    PyMySQL 安装 在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装. PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL. 如果还未安 ...

  2. One layer SoftMax Classifier, "Handwriting recognition"

        import lib needed¶ In [1]: from PIL import Image import numpy as np import matplotlib.pyplot as ...

  3. 〈四〉ElasticSearch的认识:基础原理的补充

    目录 想想我们漏了什么 回顾 补回 集群的建立 集群发现机制 配置文件 健康状态 补充: 小节总结 分片的管理 梳理 分片的均衡分配 主副分片的排斥 容错性: 数据路由 对于集群健康状态的影响 小节总 ...

  4. java架构之路-(spring源码篇)springIOC容器源码解析(上)

    我们这次来叭叭一下Spring的源码,这次博客主要来说说Spring源码,先粗略的撸一遍,下篇博客选几个重点去说,由于过于复杂,我也是看了一点点,我们先来过一遍源码,然后上流程图,最后我们再回头总结一 ...

  5. yii2 验证规则使用方法

    required : 必须值验证属性 [['字段名'],required,'requiredValue'=>'必填值','message'=>'提示信息']; #说明:CRequiredV ...

  6. Object.keys方法详解

    一.官方解释 Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 .如果对象的键-值都不 ...

  7. MySQL-时区导致的时间前后端不一致

    背景 今天早上刚上班,就被同事提示,程序的日期处理有问题.数据库里日期为:2019-05-21 11:00:00 而前端显示的日期为:2019-05-21 16:00:00 分析 那肯定是和时区相关了 ...

  8. mobaxterm和CRT的文件上传

    版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/submarineas/article/de ...

  9. RocketMQ事务消息学习及刨坑过程

    一.背景 MQ组件是系统架构里必不可少的一门利器,设计层面可以降低系统耦合度,高并发场景又可以起到削峰填谷的作用,从单体应用到集群部署方案,再到现在的微服务架构,MQ凭借其优秀的性能和高可靠性,得到了 ...

  10. 从零基础到拿到网易Java实习offer,我做对了哪些事

    作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间.本文将会讲到我在这 ...