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




相关文章
|
3月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
1243 0
|
5月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
926 0
|
5月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 > Java系统属性 > application.properties > application.yml > application.yaml。
985 0
|
2月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
315 3
|
2月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
402 2
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
578 5
|
3月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
192 0
探索Spring Boot的@Conditional注解的上下文配置
|
4月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1022 10
|
5月前
|
前端开发 Java 数据库连接
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
|
5月前
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
1172 1

热门文章

最新文章