Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part B)(下)

简介: Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part B)

properties格式配置文件多profiles方式

新建两个properties格式的配置文件,application-test.properties和application-dev.properties,通过设置端口号来确定使用的配置文件,默认使用application.properties

server.port=8081
server.servlet.context-path=/dev
复制代码
server.port=8082
server.servlet.context-path=/test
复制代码

可以在application.properties中增加配置激活哪个配置文件

spring.profiles.active=dev
复制代码

启动应用

650cf98e2e794ef99e254574b18930fb_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

根据输出的端口号可以确定application-dev.properties配置文件被激活。

yml格式配置文件多文档块方式

YML配置文件中可以使用“---”来区分文档块,文档块就相当于一个单独的配置文件。使用文档块,可以将dev配置和test配置写在一个配置文件中

spring:
  profiles:
  # 激活dev配置
    active: dev
---
# dev配置详情
server:
  port: 8083
spring:
  profiles: dev
---
# test配置详情
server:
  port: 8084
spring:
  profiles: test
---
复制代码

将properties格式配置文件中的内容全部注释掉,启动应用

6708f72b791448b19e417b46806784eb_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

根据控制台输出的端口号可以确定,YML文档块中的DEV部分被激活

命令行参数方式

在执行启动命令时使用"--spring.profile.active=dev"选择激活的配置文件,命令行模式的优先级大于配置文件

f8be49df94f74819be4aa37c29dfb896_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

启动应用

7de693530afb4c459641ef735d2c3e01_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

根据端口可以确定test配置被激活

也可以通过在终端中执行启动命令

java -jar spring-boot-configuration-0.0.1-SNAPSHOT.jar --spring.profiles.active=test
复制代码

虚拟机参数方式

修改启动配置,在VM options中添加激活配置

image.png

再次启动

image.png

控制台成功输出指定的配置文件中设置的端口号

命令行、虚拟机配置和配置文件的优先级

命令行的优先级大于虚拟机

spring:
  profiles:
    active: dev
复制代码

image.png

虚拟机优先级大于配置文件

spring:
  profiles:
    active: test
复制代码

image.png

命令行 > 虚拟机 > 配置文件

六、配置文件位置的优先级

Spring Boot启动会扫描以下位置中的配置文件作为Spring Boot的默认主配置文件,优先级从高到低

配置互补

工程目录下新增config目录,在该目录下新增application.yml,配置端口号

server:
  port: 8085
复制代码

resources目录下的配置文件新增内容

server:
  servlet:
    context-path: /app
  port: 8080
复制代码

启动项目,将VM参数和Programes参数清空

image.png

相同的配置被覆盖,不同的配置互补

spring.config.location 改变默认配置文件的位置

其他目录新建一个配置文件

server:
  port: 8088
复制代码

打包项目

java -jar spring-boot-configuration-0.0.1-SNAPSHOT.jar --spring.config.location=/Users/jingnan/Practice/March/application.yml
复制代码

image.png

plus:spring.config.location不能实现配置互补,或直接取代所有配置文件

image.png

spring.config.additional-location可以在指定配置文件的情况下同时实现互补

java -jar spring-boot-configuration-0.0.1-SNAPSHOT.jar --spring.config.additional-location=/Users/jgnan/Practice/March/application.yml
复制代码

image.png

参考文档Spring Boot 官方文档 External Application Properties

七、配置文件的加载顺序

配置文件官方文档 Spring Boot支持多种外部配置方式,优先级从高到低分别为

  1. 命令行参数
  2. 虚拟机参数
  3. 操作系统参数
  4. JAR包外部的带spring.profile的application-{profile}.properties或yml格式的配置文件
  5. JAR包内部的带spring.profile的application-{profile}.properties或yml格式的配置文件
  6. JAR包外部的不带spring.profile的application-{profile}.properties或yml格式的配置文件
  7. JAR包内部的不带spring.profile的application-{profile}.properties或yml格式的配置文件
  8. @Configuration类上的@PropertySource指定的配置文件
  9. SpringApplication.setDefaultProperties指定的默认属性

优先加载profile命令的配置文件,优先从外向内寻找

八、Spring Boot自动配置项

Spring Boot配置文件中所有的配置项可以参考官方文档 Common Application Properties

从源码中查看配置项

Spring Boot所包含的自动配置类都在org.springframework.boot.autoconfigure包下的META-INF/spring.factories中

image.png

进入DispatcherServletAutoConfiguration自动配置类的源码中,该类上标注了@AutoConfigureAfter注解

@AutoConfigureAfter(ServletWebServerFactoryAutoConfiguration.class)
复制代码

进入ServletWebServerFactoryAutoConfiguration类

@EnableConfigurationProperties(ServerProperties.class)
复制代码

该类标注了@EnableConfigurationProperties注解,指定的XxxProperties类就包含了配置项

image.png

image.png

DispatcherServletAutoConfiguration 和ServletWebServerFactoryAutoConfiguration使用的是相同的配置

相关注解的作用

  • @Configuration:表示这是一个配置类,同以往的XML配置文件一样,可以往容器中注册组件或者Bean
  • @EnableConfigurationProperties:启动指定类的ConfigurationProperties功能,将配置文件中对应的值和XxxProperties绑定起来
  • @AutoConfigureAfter:在某个自动配置类配置后在执行自动配置
  • @ConfigurationProperties:从配置文件中获取指定的值和Bean的属性进行板顶

所有的配置项都来自自动配置类中启用的XxxProperties类,也就说说一旦自动配置类生效,这个配置类就会给容器中注册各种组件,这些组件的属性都是从@EnableConfigurationProperties注解指定的XxxProperties类中获取的,这些类里面的每一个属性和配置文件是一一绑定的

总结

  • XxxxAutoConfiguration是自动配置类,往容器中注册组件
  • XxxProperties封装了配置文件中的相关属性
  • @Conditional派生注解
@Conditional派生注解        作用(判断是否满足当前指定的条件)      
@ConditionalOnJava 判断系统Java版本是否符合要求
@ConditionalOnBean 判断容器中是否存在指定的Bean
@ConditionalOnMissingBean 判断容器中是否不存在指定的Bean
@ConditionalOnExpression 判断是否满足SpEL表达式
@ConditionalOnClass 判断系统中是否有指定的类
@ConditionalOnMissingClass 判断系统不含有指定的类
@ConditionalOnSingleCandidate 判断容器中的Bean是否只有一个或者是首先的Bean
@ConditionalOnProperty 判断指定的属性是否有指定的值
@ConditionalOnResource 判断类路径下是否存在指定的资源文件
@ConditionalOnWebApplication 判断当前是否是Web环境
@ConditionalOnNotWebApplication 当前是否不是Web环境
@ConditionalOnJndi 当前Jndi存在指定项

如何查看启用和未启用的配置

官方配置文档中的第一项是debug,设置debug=true时控制台会输出哪些配置类启用

debug: true
复制代码

启动主程序

image.png

image.png

控制台会打印出当前应用程序中所有激活的和未激活的配置


相关文章
|
12天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
24 2
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
56 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
监控 Java 应用服务中间件
Spring和Spring Boot的区别
Spring和Spring Boot的主要区别,包括项目配置、开发模式、项目依赖、内嵌服务器和监控管理等方面,强调Spring Boot基于Spring框架,通过约定优于配置、自动配置和快速启动器等特性,简化了Spring应用的开发和部署过程。
54 19
|
1月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
68 2
|
1月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
109 1
|
1月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
28 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
1月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
27 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
1月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
182 2
|
1月前
|
前端开发 安全 Java
【Spring】Spring Boot项目创建和目录介绍
【Spring】Spring Boot项目创建和目录介绍
84 2
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
下一篇
无影云桌面