【SpringBoot】SpringBoot配置文件
上次说完SpringBoot项目搭建的流程和原理,这节写一下SpringBoot的配置文件的相关知识。
1.配置文件类型和作用
SpringBoot的设计思路就是约定大于配置,很多配置都是设定好的,不用我们再去设置,但是某些参数还是需要我们自己设定,这个时候就要用到SpringBoot的配置文件了,有两种常用的配置文件(在Resources目录下):
application.properties或者application.yml(application.yaml),可以在里面按照它们的语法规则设定我们想要配置的参数。
在SpringBoot 启动时,会从Resources目录下加载application.properties或application.yml(application.yaml)文件。
application.properties文件是键值对类型的文件,通过.来连接,通过=来赋值,结构上,没有分层的感觉,但比较直接。
spring.datasource.name=springbootdemo
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdemo
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
可以看到properties类型的文件重复的部分较多,层次感不明显,不易于阅读。
YAML是一种直观的能够被电脑识别的的数据序列化格式,它的后缀名可以是ymal、yml,通过:来分层,结构上,有比较明显的层次感,容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导
入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简
洁。注意,赋值时“:”后需要留一个空格,否则这条参数不生效。
spring:datasource:name: springbootdemourl: jdbc:mysql://localhost:3306/springbootdemousername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver
yml格式的文件结构就清晰多了。
**properties和yml的优先级:**如果工程中同时存在application.properties文件和 application.yml文件,yml文件会先加载,而后加载的properties文件会覆盖yml文件。所以建议工程中,只使用其中一种类型的文件即可。
上面提及过,SpringBoot的配置文件,主要的目的就是对配置信息进行修改的,但在配置时的key从哪里去查询呢?我们可以查阅SpringBoot的官方文档
文档URL:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#common-applicationproperties
常用的配置摘抄如下:
...
server.port=8080 # Server HTTP port.
server.server-header= # Value to use for the Server response header (if empty, no header is sent).
server.use-forward-headers= # Whether X-Forwarded-* headers should be applied to the HttpRequest.
server.servlet.context-parameters.*= # Servlet context init parameters.
server.servlet.context-path= # Context path of the application.
server.servlet.application-display-name=application # Display name of the application.
server.servlet.jsp.class-name=org.apache.jasper.servlet.JspServlet # The class name of the JSP servlet.
server.servlet.jsp.init-parameters.*= # Init parameters used to configure the JSP servlet.
server.servlet.jsp.registered=true # Whether the JSP servlet is registered.
server.servlet.path=/ # Path of the main dispatcher servlet.
server.servlet.session.cookie.comment= # Comment for the session cookie.
server.servlet.session.cookie.domain= # Domain for the session cookie.
server.servlet.session.cookie.http-only= # "HttpOnly" flag for the session cookie.
server.servlet.session.cookie.max-age= # Maximum age of the session cookie. If a duration suffix is not specified, seconds will be used.
server.servlet.session.cookie.name= # Session cookie name.
...
2.配置文件扫描优先级
在实际生产中,配置文件的放置位置是可以选择的,不同的位置被读取的优先级也是不同的。
从上到下4个配置文件分别设置的访问端口为8080、8081、8082、8083,接下来通过试验来验证它们读取的优先级。
1.直接运行启动类main方法,结果如下:
说明是与src同级的config文件中的配置文件生效了,即它的优先级最高。
2.删除8080配置文件,再运行启动类main方法:
端口为8084,src同级的配置文件生效。
3.删除8084配置文件,运行启动类main方法:
端口为8081,说明resources下的config文件中的配置文件生效,即resources文件夹下config文件夹中配置文件的优先级高于resources文件夹中的配置文件。
4.删除8081配置文件,运行启动类main方法:
端口为8082,说明resources文件夹下properties类型的优先级高于yml类型。
5.删除8082配置文件,运行启动类main方法:
yml配置文件的优先级低于properties。
通过实验可知配置文件的优先级如下(源码说明):
file:/config/
file:/
classpath:/config/
classpath:/
以上顺序按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级的配置内容会覆盖低优先级配置的内容,其中配置文件中的内容是互补配置,即存在相同的配置内容,高优先级的内容会覆盖低优先级的内容,存在不同的内容的时候,高优先级和低优先级的配置内容取并集。
3.不同环境的配置文件
开发的各个阶段的应用配置也各不相同,像路径、数据库等等,SpringBoot针对这种情况提供了多环境配置功能:即
为每个环境单独新建一个配置文件,命名规则为:application-环境标识.properties:
application.properties和application.yml是总配置文件,下面三个分别为开发、生产、测试环境的配置文件。
Spring Boot 不会直接启动这些环境的配置文件,在不指定配置文件时,它默认使用 application.properties/yaml/yml 主配置文件,并用profile的active 属性来指定使用哪个配置文件启动项目。
spring.profiles.active=dev
运行启动类的main方法:
主配置文件active属性改为test后再启动:
yml类型的设置与此类似:
4.yml配置文件的语法
由于yml类型配置文件更加直观易读,我们主要使用这种配置文件,它的语法如下:
1.普通数据
语法:
key: value
username: root
2.对象数据与map数据
语法:
key:
key1: value1
key2: value2
或者:
key: {key1: value1,key2: value2}
phone: {name: oppo,price: 3999.0}
#或者
phone1:name: appleprice: 5999.0
3.数组(List、Set)数据
语法:
key:
-value1
-value2
或者:
key: [value1,value2]
List:
country:- China- UK- US- Japan
或者
country: [China,UK,US,Japan]
Set:
goods:- category: phone brand: oppoprice: 3999.0- category: carbrand: bmwprice: 399999.0- category: bicyclebrand: meridaprice: 3999.0
5.配置文件与配置类的属性映射方式
除了上述SpringBoot自带的配置项,还可以在配置文件中写入自定义的参数,再通过注解拿到这些参数。
1.我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上,例如:
application.properties配置如下:
spring.profiles.active=test
person.name=zhangsan
person.age=18
application.yml
spring:profiles:active: dev
person:name: zhangsanage: 18
要映射的bean如下:
package com.example.demo.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.ResponseBody;@Controller
public class BeginDemo {@Value("${person.name}")private String name;@Value("${person.age}")private Integer age;@RequestMapping("/person")@ResponseBodypublic String quick(){return "springboot 访问成功! name="+name+",age="+age;}
}
浏览器访问localhost:8092/person,效果如下:
2.使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方
法才可以,而使用@Value注解修饰的字段不需要提供set方法。
先准备一个实体类,用于映射字段:
@Data注解可以帮我们自动生成get/set方法
@Component注解表明要把这个类实例化到spring容器中
@ConfigurationProperties注解会自动映射配置文件和实体属性,括号里的前缀可以区分同名的属性。
@Controller
public class BeginDemo {@Autowiredprivate Person person;@RequestMapping("/person")@ResponseBodypublic String quick(){return "springboot 访问成功! name="+person.getName()+",age="+person.getAge();}
}
运行启动类的main方法,浏览器访问http://localhost:8092/person
结果:
application.properties已改为:
spring.profiles.active=test
person.name=laowang
person.age=81
成功读取到配置文件中的参数。
**注意:**在 Person类中使用 ConfigurationProperties 注解后,IDEA 会出现一个警告,不影响程序的执行。
在pom文件中加入以下依赖可以解决:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional>
</dependency>
spring-boot-configuration-processor就是给自定义的配置类生成元数据信息的,添加这个依赖后不会报上面那个错了。
参数中的中文通过注解拿到后会显示乱码,可以通过设置配置文件的编码格式来处理,改为UTF-8:
这节主要介绍了SpringBoot配置文件的相关知识,下节开始学习SpringBoot整合其他技术。
【SpringBoot】SpringBoot配置文件相关推荐
- SpringBoot YML配置文件
引言 在之前的博客中说到了怎么样去创建一个SpringBoot的项目以及创建这个Spring项目之后怎么去启动使用这个SpringBoot的项目文件,还有就是SpringBoot项目的启动原理.下面的 ...
- SpringBoot写配置文件报错“The elements [xxx,xxx] were left unbound.“
异常 在SpringBoot的配置文件application.yaml中写配置报错: 2021-06-22 21:01:01.962 WARN 28928 --- [ main] ConfigServ ...
- [学习记录] SpringBoot 5. 配置文件
SpringBoot 5. 配置文件 尚硅谷 官方文档 1. yaml 文件 适合用来做以数据为中心的配置文件. 1.1 基本语法 key: value 大小写敏感 使用缩进表示层级关系 # 表示注释 ...
- SpringBoot之配置文件,带你全面掌握高级知识点
pets:‐ cat‐ dog‐ pig 而第二种写法则是yaml对于这类数组类型的优化写法,支持将值写入一行,代表一个数组的值,使用[]进行包裹,如下: pets: [cat,dog,pig] 自动 ...
- springboot自动配置文件读取以及源码分析
今天来讲讲springboot自动配置文件读取以及源码分析 springboot启动之后 1.首先进入@springbootApplication(如上图) 里面的**@EnableAutoConfi ...
- SpringBoot第 5 讲:SpringBoot+properties配置文件读取
一.创建Maven项目 参考:SpringBoot第 1 讲:HelloWorld_秦毅翔的专栏-CSDN博客 二.修改pom.xml pom.xml中只需要添加springboot依赖即可 < ...
- 你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及源码解析
你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及原理解析 一.SpringBoot全局配置文件优先级 二.属性注入常用注解 1 ...
- Linux使用Docker安装Nacos并配置MySQL数据源,将Springboot的配置文件部署到Nacos
Linux使用Docker安装Nacos并配置MySQL数据源,将Springboot的配置文件部署到Nacos 前言 一.Docker中安装配置Nacos 安装Docker 拉取Nacos镜像 启动 ...
- Java|Kotlin, SpringBoot从配置文件中读取@KafkaListener参数配置
springboot从配置文件中设置@KafkaListener参数配置 在java中使用占位符#{'${kakfa.topics}'}来进行参数注入 @KafkaListener(topics = ...
- 一文了解SpringBoot的配置文件
本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的云原生学习步骤,提升工程化编码能力和思维能力,写出高质量代码.希望大家都能够从中有所收获,也请大家多 ...
最新文章
- 安装和配置Tomcat
- 如何避免把 Python 代码写得跟屎一样?
- 转载的SSO文章,很基础
- Spring4基础 学习笔记(5) ---- Spring与Dao
- spring aop 中@annotation()和自定义注解的使用
- 苹果“炸场”发布会:搭载刘海屏的MacBook Pro来了,还有AirPods 3...
- 苹果AirPods Max拼多多百亿补贴价来了:券后价3999元
- Unity3D之NGUI基础5:UISprite显示图片
- 181113每日一句
- 软件测试 - 用例篇
- 为什么建议每个开发人员都需要学Python?
- 2022年低压电工考试及低压电工模拟考试题库
- Servlet JSP 面试题
- 如何选择频谱监测的天线?
- 深耕智慧园区 看龙田科技与华为的“默契”
- 对数与指数函数的求导
- 克隆虚拟机后开机出现device eth0 does not seem to be present delaying initializa错误
- android USB OTG功能如何打开及实现
- 微信公众号接入百度机器人
- 网络编程学习_TCP协议