SpringBoot的配置【配置文件、加载顺序、配置原理】(超详细)下

简介: SpringBoot的配置【配置文件、加载顺序、配置原理】(超详细)

配置文件占位符


随机数


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

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


# 配置person的值
person.last-name=Keafmd${random.uuid}
#person.last-name=张三
#person.age=${random.int}
person.age=18
person.boss=false
person.birthday=2022/02/02
person.maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
#person.dog.name=${person.last-name}的二狗
person.dog.name=${person.hello:hello}的二狗
#person.dog.name=二狗
person.dog.age=3

Profile


多Profile文件


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

默认使用application.properties的配置


12.png


yml支持多文档块方式


server:
  port: 8081
spring:
  profiles:
    active: dev #指定属于哪个环境
---
server:
  port: 8083
spring:
  config:
    activate:
      on-profile: dev
---
server:
  port: 8084
spring:
  profiles: prod  #不推荐的写法
---

1.png


激活指定profile


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

application.properties:


server.port=8081
spring.profiles.active=dev

命令行


1、可以在这里配置


1.png2.png



2、也可以直接在测试的时候,配置传入命令行参数

打包后运行jar包时,输入下面的命令:


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

虚拟机参数


-Dspring.profiles.active=dev



配置文件加载位置


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

–file:./config/

–file:./

–classpath:/config/

–classpath:/


优先级由高到底,高优先级的配置会覆盖低优先级的配置

1.png


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


例子:


我们创建个HelloController:


package com.keafmd.springboot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * Keafmd
 *
 * @ClassName: HelloController
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-02-23 17:07
 */
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

这是上面优先级第四的配置文件内容:


server.port=8081
# 配置项目的访问路径
server.servlet.context-path=/boot02

这是上面优先级第一的配置文件内容:


server.port=8084

最后我们启动程序。


运行结果:

1.png2.png



我们还可以通过spring.config.location来改变默认的配置文件位置


我们先在F盘放一个配置文件,在这个配置文件把端口改为8085:


server.port=8085

1.png

测试一下:

2.png

说明这样是不起作用的。


我们先将项目打包,生成jar包。

3.png


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


java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.additional-location=F:/application.properties


打开便捷的控制台:

4.png


输入:java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.additional-location=F:/application.properties,然后回车:

5.png


我们就可以发现,是启动的8085端口,证明启用的F盘的配置文件。

6.png


外部配置加载顺序


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


1. 命令行参数


所有的配置都可以在命令行上进行指定


java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087  --server.servlet.context-path=/abc

1

多个配置用空格分开, --配置项=值


运行结果:

1.png2.png



2. 来自java:comp/env的JNDI属性


3. Java系统属性(System.getProperties())


4. 操作系统环境变量


5. RandomValuePropertySource配置的random. * 属性值



由jar包外向jar包内进行寻找,优先加载带profile

3.png


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指定的默认属性


所有支持的配置加载来源:参考官方文档

4.png




目录
打赏
0
0
0
0
8
分享
相关文章
Spring Boot开箱即用可插拔实现过程演练与原理剖析
【11月更文挑战第20天】Spring Boot是一个基于Spring框架的项目,其设计目的是简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供约定优于配置的理念,减少了大量的XML配置和手动设置,使得开发者能够更专注于业务逻辑的实现。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,为开发者提供一个全面的理解。
40 0
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
70 0
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
SpringBoot配置跨模块扫描问题解决方案
在分布式项目中,使用Maven进行多模块开发时,某些模块(如xxx-common)没有启动类。如何将这些模块中的类注册为Spring管理的Bean对象?本文通过案例分析,介绍了两种解决方案:常规方案是通过`@SpringBootApplication(scanBasePackages)`指定扫描路径;推荐方案是保持各模块包结构一致(如com.xxx),利用SpringBoot默认扫描规则自动识别其他模块中的组件,简化配置。
SpringBoot配置跨模块扫描问题解决方案
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
72 14
|
2月前
|
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
59 1
SpringBoot入门(7)- 配置热部署devtools工具
|
2月前
|
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
55 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
2月前
|
SpringBoot自动装配的原理
在Spring Boot项目中,启动引导类通常使用`@SpringBootApplication`注解。该注解集成了`@SpringBootConfiguration`、`@ComponentScan`和`@EnableAutoConfiguration`三个注解,分别用于标记配置类、开启组件扫描和启用自动配置。
63 17
springboot自动配置原理
启动类@SpringbootApplication注解下,有三个关键注解 (1)@springbootConfiguration:表示启动类是一个自动配置类 (2)@CompontScan:扫描启动类所在包外的组件到容器中 (3)@EnableConfigutarion:最关键的一个注解,他拥有两个子注解,其中@AutoConfigurationpackageu会将启动类所在包下的所有组件到容器中,@Import会导入一个自动配置文件选择器,他会去加载META_INF目录下的spring.factories文件,这个文件中存放很大自动配置类的全类名,这些类会根据元注解的装配条件生效,生效
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
43 3

热门文章

最新文章