一篇文章带你搞懂 SpringBoot 的配置文件

文章目录

    • 一、SpringBoot 配置文件类型
      • 1. SpringBoot配置文件类型和作用
      • 2. application.yml配置文件
      • 3. SpringBoot配置信息的查询
    • 二、配置文件与配置类的属性映射方式
      • 1. 使用注解@Value映射
      • 2. 使用注解@ConfigurationProperties映射

一、SpringBoot 配置文件类型

1. SpringBoot配置文件类型和作用

SpringBoot 是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用 application.properties或者application.yml(application.yaml)进行配置。

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

其中,application.properties文件是键值对类型的文件,具体可参考
除了properties文件外,SpringBoot 还可以使用 yml 文件进行配置,下面对 yml 文件进行讲解。

虽然 properties 文件比较常见,但是相对于 properties 而言,yaml 更加简洁明了,而且使用的场景也更多,很多开源项目都是使用 yaml 进行配置(例如 Hexo)。除了简洁,yaml 还有另外一个特点,就是 yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要,此时我们一般采用 yaml。

2. application.yml配置文件

(1)yml配置文件简介
YML 文件格式是 YAML (YAML Aint Markup Language) 编写的文件格式,YAML 是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持 YAML 库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。

YML文件是以数据为核心的,比传统的xml方式更加简洁。

YML文件的扩展名可以使用.yml或者.yaml

(2)yml 配置文件的语法

  • 配置普通数据
    语法:key: value
    注意:value之前有一个空格
name: yolo
  • 配置对象数据
    注意:下面 key1前面的空格个数不限定,在yml语法中,相同缩进代表同一个级别
语法:
	key:
		key1: value1
		key2: value2
	或者:key: {key1: value1,key2: value2}
例如:
person:
  name: yolo
  age: 19
  addr: shanghai
或者:person: {name: yolo,age: 18,addr: beijing}
  • 配置数据、集合(普通字符串)
city:
  - beijing
  - tianjin
  - chongqing
  - shanghai

或者 city: [beijing,tianjin,chongqing,shanghai]
  • 配置数据、集合(对象数据)
student:
  - name: tom1
    age: 18
    addr: beijing
  - name: tom2
    age: 17
    addr: tianjin

#student: [{name: tom1,age: 18,addr: beijing},{name: tom2,age: 17,addr: tianjin}]
  • Map 配置
map:
  key1: value1
  key2: value2

3. SpringBoot配置信息的查询

SpringBoot 的配置文件,主要的目的就是对配置信息进行修改的,但在配置时的 key 可以查阅SpringBoot的官方文档:文档URL

常用的配置信息:

# QUARTZ SCHEDULER (QuartzProperties)
spring.quartz.jdbc.initialize-schema=embedded # Database schema initialization mode.
spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
spring.quartz.job-store-type=memory # Quartz job store type.
spring.quartz.properties.*= # Additional Quartz Scheduler properties.

# ----------------------------------------
# WEB PROPERTIES
# ----------------------------------------
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8080 # Server HTTP port.
server.servlet.context-path= # Context path of the application.
server.servlet.path=/ # Path of the main dispatcher servlet.

# HTTP encoding (HttpEncodingProperties)
spring.http.encoding.charset=UTF-8 # Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly.

# SPRING MVC (WebMvcProperties)
spring.mvc.servlet.load-on-startup=-1 # Load on startup priority of the dispatcher
servlet.
spring.mvc.static-path-pattern=/** # Path pattern used for static resources.
spring.mvc.view.prefix= # Spring MVC view prefix.
spring.mvc.view.suffix= # Spring MVC view suffix.

# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.driver-class-name= # Fully qualified name of the JDBC driver. Auto￾detected based on the URL by default.
spring.datasource.password= # Login password of the database.
spring.datasource.url= # JDBC URL of the database.
spring.datasource.username= # Login username of the database.

# JEST (Elasticsearch HTTP client) (JestProperties)
spring.elasticsearch.jest.password= # Login password.
spring.elasticsearch.jest.proxy.host= # Proxy host the HTTP client should use.
spring.elasticsearch.jest.proxy.port= # Proxy port the HTTP client should use.
spring.elasticsearch.jest.read-timeout=3s # Read timeout.
spring.elasticsearch.jest.username= # Login username.

我们可以通过配置application.poperties 或者 application.yml 来修改SpringBoot的默认配置

二、配置文件与配置类的属性映射方式

1. 使用注解@Value映射

在这里插入图片描述

package yolo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Value("${name}")
    private String username;
    @Value("${person.age}")
    private Integer age;

    @RequestMapping("/person")
    public String getPerson() {
        return "username = " + username + " age = " + age;
    }
}

在这里插入图片描述

2. 使用注解@ConfigurationProperties映射

通过注解@ConfigurationProperties(prefix="配置文件中的key的前缀")可以将配置文件中的配置自动与实体进行映射

这里使用@ConfigurationProperties("person"),注意对于person 对应application.ym 中的 person对象, 同时属性需要有对应的 get 和 set 方法:
在这里插入图片描述

package yolo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@ConfigurationProperties("person")
public class UserController {
    private String name;
    private Integer age;
    @RequestMapping("/person")
    public String getPerson() {
        return "username = " + name + " age = " + age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

IDEA 出现:点击 Open Documentation
在这里插入图片描述
将这个依赖添加到 pom 文件中即可:此时再使用 ym 文件中时会给一定的提示,也就是在使用类和 ym 文件建立了一个联系。

 <!--@ConfiguaritionProperties的执行器的配置-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

热门文章

编程学习 ·

实战系列-Spring Cloud微服务中三把利器Feign、Hystrix、Ribbon

导语在之前的分享中分享过关于Fegin的底层实现原理,以及Spring Cloud OpenFegin的启动原理。在这次的分享中主要总结一下Spring Cloud 微服务架构的三把利器。对于Fegin、Hystrix、Ribbon三个组件来说它们之间是什么样的关系。怎么样综合使用等这些问题就是这次分享的内容文章…
编程学习 ·

XTransfer欧美本地账户可以收哪些地区的币种?

很多人注册了XTransfer账户之后,开通了XTransfer欧美本地账户。本地收款账户有两个,一个是美元的开户行是纽约的Community Federal Savings Bank(CFSB),一个是欧元的开户行是英国的 Currency Cloud。欧美本地收款账户可以用于接收欧洲、美国的本地汇款,买家通过本地清算网…
编程学习 ·

牧牛链,牧牛帮排线

牧牛链医疗鉴证区块链 截至到目前为止,国家大数据局尚未完成对所有医疗机构内生成的医疗数据收集整理,也未完成对居民个人健康档案或病历的电子化进程。医疗机构上传数据和居民主动上传意愿不强烈。越来越多的医疗纠纷报道已经严重影响到医生群体的工作热情。许多医生对于基于…
编程学习 ·

线程

1.线程 1.什么叫做线程,跟进程之间的关系 进程:独立的cup空间运行 线程:进程中的一个执行流程,一个进程中可以包含多个线程,这些线程共享该进程提供的资源 2.创建线程(两种方式) 让这类继承Thread类 class XXX extends Thread{ public void run() Thread xx = new Threa…
编程学习 ·

7-9 1.2.5 双重回文数 (70分)

如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321 就是一个回文数,而 77778 就不是. 当然,回文数的首和尾都应是非零的,因此 0220 就不是回文数. 事实上,有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是 回…
编程学习 ·

Web自动化测试:页面元素的定位方法

这一节,我们介绍一下页面元素定位的八种方式和如何通过火狐和谷歌浏览器获取元素定位信息.页面元素的定位方法 html页面是有一个个的标签组成的,我们定位元素其实就是定位这些标签。首先来看一下有哪儿几种定位方式:idnameclass nametag namelink textpartial link textxpat…
编程学习 ·

Portworx Essentials 视频讲解

Portworx Essentials vs. Portworx Enterprise:https://www.iqiyi.com/v_19rzfuk1yw.html欢迎回到Portworx讲解视频系列,我是Ryan Warner。今天我们来介绍一下Portworx Essentials版本,以及与Portworx Enterprise版本的区别。Portworx Essentials是在K8S上运行数据管理的最必…
编程学习 ·

JDK的安装与配置

搭建java开发环境 java语言执行需要经过编译原代码,之后才可以在JVM上解释字节码车光绪,这些需要JDK的支持才能完成 开发者可以直接通过Oracle官方网站获取JDK工具。选择与自己操作系统对应版本,初学者版本不必过新。 下载完之后获得一个程序安装包,双击运行即可。 例如将J…
编程学习 ·

Java中Date类型数据格式转换

查询数据库datetime类型数据,返回的结果是Mon Jun 22 19:37:29 CST 2020 先转换成yyyy-MM-dd类型的格式。 /** * 获取现在时间 * * @return 返回短时间字符串格式yyyy-MM-dd */ public static String getStringDateShort() { Date currentTime = new Date(); SimpleDateF…
编程学习 ·

TabRow + TextView导致文字显示不完全

我们在使用表格布局TabLayout时会出一个现象:TextView显示文字时当超过屏幕换行是最后一个文字显示不完全,这个时候我们可以将Textview改成如下布局即可将android:layout_width="wrap_content"改为android:layout_width="0dp" 同时添加该属性android:lay…
编程学习 ·

Leetcode 349. 两个数组的交集 C++

Leetcode 349. 两个数组的交集 题目 给定两个数组,编写一个函数来计算它们的交集。 测试样例 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4]说明:输出结果中的每个元素一定是唯一的。 我们可以…
编程学习 ·

理论:深度介绍OSPF路由协议

目录前言1 OSPF路由协议概述1.1 内部网关协议和外部网关协议1.2 OSPF协议1.3 链路状态协议工作原理简介1.4 OSPF的工作过程2 OSPF的基本概念2.1 OSPF区域2.2 区域ID2.3 骨干区域Area 02.4 非骨干区域2.5 Router ID2.6 Router ID选取规则2.7 DR和BDR3 Router-id及DR选举原则4 OS…
编程学习 ·

MySQL创建新连接时,不能成功连接的问题

创建新连接后,用户名和密码都是对的,地址和端口也都是本地但还是会出现错误。比如:1、2003错误:2003 cannot connect to mysql一般是没有启动MySQL服务,在服务中找到MySQL80,启动之。2、1045错误:ERROR 1045 (28000): Access denied for user root@localhost (using pas…
编程学习 ·

Linux命令21天打卡

1)给文件 isTester.ini 赋予 只读权限1. 创建文件 isTester.inivi isTester.ini2. 更新文件内容为“21 day Linux Learn ,Im Idolaoxu,in shenzhen ."输入 i ,进入编辑模式,输入内容,esc进入命令模式 :wq 保存 。chmod +R isTester.ini2)给文件 isTester.ini 赋予 读…
编程学习 ·

kuangbin专题8 生成树 次小生成树部分 HDU4081/UVA10600/UVA10462

前言 本来壮志凌云的想都做完 发现我在做梦。。。 朱刘算法太难了(自己太懒发现性价比比较低之后就没做而且算法介绍也太难懂了好几个关键词含义都不给简直简直太难了我枯 HDU4081 Qin Shi Huang’s National Road System 题意:给你一个图的各个点的坐标 再给你每个点的权值…
编程学习 ·

疫情下的舆情预测系统工作报告part.4

项目地址:https://github.com/Lee991211/Innovation_training.git数据清洗 当获取了大量的微博数据,需要对冗余数据进行清洗,使数据满足一定格式,以达到模型训练的要求@杨涛同学。当然这个任务相对于爬取就比较简单了,出于保存数据备份的想法,我的清洗脚本分为两步。 was…
编程学习 ·

Android Studio 连接夜神模拟器

1、在夜神模拟器安装bin目录下,输入cmd,回车打开命令窗口2、输入命令nox_adb.exe connect 127.0.0.1:62001unable to connect to 127.0.0.1:62001: cannot connect to 127.0.0.1:62001: 由于目标计算机积极拒绝,无法连接。 (10061) 这是端口号问题 【若没有问题,可跳过3、4…
编程学习 ·

C++笔记 变量

primer c++笔记 变量 变量定义首先是类型说明符随后紧跟由一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。列表初始化 int units_sold = 0; int units_sold = {0}; int units_sold {0}; int units_sold (0);花括号来初始化变量,这种初始化的形式被称为列…
编程学习 ·

【Flink】Object Reuse 模式(Stream API)

1. 概述昨天在界面上看到一句话,主管让加上去,于是我去查查这个参数有什么用 官网:https://ci.apache.org/projects/flink/flink-docs-stable/dev/execution_configuration.html enableObjectReuse() / disableObjectReuse() By default, objects are not reused in Flink. …