springboot的配置

SpringBoot 配置文件使用详解 文件中配置的属性名称,它提供了一些绑定规则,它不要求配置的属性名称完全与 Bean 中的属性名称相同。@ConfigurationProperties:将配置文件中的相关配置和类里面的属性进行绑定。YAML 是比 properties 格式更年轻,在云原生里用的很多这种配置格式。在上一小节的图中可以看到,在 src/main/resources 目录下的。加载顺序依次从上到下,所有文件都会加载,高优先级的内容会覆盖低优先级的内容。上面的也可以用 @Value 读取,程序跟前面例子一样。 阅读详情

一、yml基本语法与表达

1、yaml基本语法

1、k:(空格)v 表示键值对

key: value

2、利用缩进表示层级关系

key:
	child-key1: value1
	child-key2: value2

3、属性和值大小写敏感
4、注释
使用#进行注释

#xxxxxxx
key: value

2、值的表达

1、对象

Student:
	name: tom
	age: 11
#行内写法
Student: {name:tom,age:11}

2、数组

nums: 
	- 1
	- 2
	- 3
#行内写法
nums: {1,2,3}

二、springboot配置文件

在写之前可以先导入配置文件处理器,这样在编写yml时就会有提示了

<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

1、配置文件值的注入

前提:必须将该配置文件所对应的javabean放在IOC容器中,即使用@Component注解

方式1
使用@ConfigurationProperties(prefix = “person”)设一个用于绑定的值,在配置文件中通过这个绑定值,来设置该类其中的属性。

javabean

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private boolean boss;
    private Date date;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;
    ....
}
@Component
public class Dog {
    private String name;
    private Integer age;
    ...
}

yml配置文件

person:
  lastname: zhangsan
  age: 11
  boss: true
  date: 2010/11/11
  maps: {k1: v1,k2: v2}
  list:
    - list1
    - list2
    - list3
  dog:
    name: xiaoming
    age: 2

结果:

Person{lastName='zhangsan', age=11, boss=true, date=Thu Nov 11 00:00:00 CST 2010, maps={k1=v1, k2=v2, kw=v2}, list=[list1, list2, list3], dog=Dog{name='xiaoming', age=2}}

方式二
可以通过使用@PropertySource指定properties配置文件将其中的值赋给该对象

配置文件

person.last-name=张三
person.age=11
person.boss=false
person.date=2021/2/2
person.maps.k1=v1
person.maps.kw=v2
person.list=a,x,c,v
person.dog.name = dog
person.dog.age = 15

javabean

/**
 * 将配置文件中的每一个属性的值映射到这个组件中
 * @ConfigurationProperties 高数springboot将本类中所有属性和配置文件中相关的配置进行绑定
 *      prefix 在配置文件中哪个下面的所有属性进行一一映射
 * 只有这个组件是容器中的组件,才能提供@ConfigurationProperties的功能
 *
 * @PropertySource 导入spring的配置文件,让配置文件中的内容生效
 */
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private boolean boss;
    private Date date;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;
    ...
}

结果

Person{lastName='张三', age=11, boss=false, date=Tue Feb 02 00:00:00 CST 2021, maps={k1=v1, kw=v2}, list=[a, x, c, v], dog=Dog{name='dog', age=15}}

方式三
使用@Value注解为属性赋值

@Component
//@ConfigurationProperties(prefix = "person")
public class Person {

    @Value("zhangsan")
    private String lastName;
    @Value("11")
    private Integer age;
    private boolean boss;
    private Date date;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;

结果

Person{lastName='zhangsan', age=11, boss=false, date=null, maps=null, list=null, dog=null}

2、@Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties@Value
功能批量注入配置文件中的属性一个个指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

3、配置文件注入数据校验

在使用校验之前需要先导入字段校验的依赖

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.4.Final</version>
        </dependency>

先用@Validated注解修饰要校验的类,然后用一下的注解修饰该类中要校验的属性

借鉴

@AssertFalse 校验false
@AssertTrue 校验true
@Email 校验是否是邮箱格式
@DecimalMax(value=,inclusive=) 小于等于value,
inclusive=true,是小于等于
@DecimalMin(value=,inclusive=) 与上类似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull  检查Null
@Past  检查日期
@Pattern(regex=,flag=)  正则
@Size(min=, max=)  字符串,集合,map限制大小
@Validate 对po实体类进行校验

使用方式三的配置文件注入

@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

//    @Value("zhangsan")
    @Email
    private String lastName;
//    @Value("11")
    private Integer age;
    private boolean boss;
    private Date date;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;
	...
}

结果:

java.lang.IllegalStateException: Failed to load ApplicationContext

4、配置文件占位符

#配置person的值
#配置文件的占位符${},如果想设没有的默认值可以用${name:defualt}
#通过使用${random.xxxx}随机数 例${random.value}、${random.int}、${random.long}、${random.int(10)}、${random.int[1024,65536]}等等
person.last-name=张三${random.int}
person.age=11
person.boss=false
person.date=2021/2/2
person.maps.k1=v1
person.maps.kw=v2
person.list=a,x,c,v
person.dog.name = ${person.hello:hello}dog
person.dog.age = 15

结果

//结果1
Person{lastName='张三-1155973093', age=11, boss=false, date=Tue Feb 02 00:00:00 CST 2021, maps={k1=v1, kw=v2}, list=[a, x, c, v], dog=Dog{name='hellodog', age=15}}
//结果2
Person{lastName='张三1191295749', age=11, boss=false, date=Tue Feb 02 00:00:00 CST 2021, maps={k1=v1, kw=v2}, list=[a, x, c, v], dog=Dog{name='hellodog', age=15}}

5、多Profile文件

1、多Profile文件
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;
在这里插入图片描述
application.properties文件

#激活使用application-dev.properties配置文件
spring.profiles.active=dev

application-dev.properties文件

#使用application-{profile},properties/yml取配置文件名
#默认使用的是application.properties
server.port=8081

application-prod.properties文件

server.port=8082

结果
在这里插入图片描述

2、yml支持多文档块方式

#yml支持多文档块方式用 --- 来分割文档块
server:
  port: 8080
spring:
  profiles:
    active: prod
---
server:
  port: 8081
spring:
  profiles: dev #制定属于那个环境
---
server:
  port: 8082
spring:
  profiles: prod
---

结果
在这里插入图片描述

6、配置文件加载位置

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

file:./config/

file:./

classpath:/config/

classpath:/

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

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

在这里插入图片描述
还可以通过spring.config.location来改变默认的配置文件位置

7、外部配置加载顺序

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

1.命令行参数

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

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

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

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

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

4.操作系统环境变量

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

由jar包外向jar包内进行寻找;

优先加载带profile

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

所有支持的配置加载来源;

参考官方文档

【SpringBoot4】如何理解SpringBoot的约定大于配置 今天我们来谈谈SpringBoot到底给我们带来了什么以及如何做的。 阅读详情

相关推荐

十七、SpringBoot配置连接池

内置的连接池目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池。 数据库连接可以使用DataSource池进行自动配置。 由于Tomcat数据源连接池的性能和并发,在tomcat可用时,我们总是优先使用它。 如果HikariCP可用,我们将使用它。 如果Commons DBCP可用,我们将使用它,但在生产环境不推荐使用它。 最后,如果Com

等风的帆 2万+

springboot yml语法 ${} 用法

yml语法 ${} 用法 yml中自定义一个域名属性: mytest: domainName: https://blog.youkuaiyun.com/imHanweihu/article/details/96111227 那么在此配置文件中,就可通过${}来代替域名了 url: helpCenter: ${xboot.domainName}/szoa/app/html/get...

lisheng19870305的专栏 5万+

学习记录-Simpack生成车轮不圆的几种示例

单阶、多阶和实测车轮多边形的添加教程

weixin_51965897的博客 3707

springboot项目yml文件中${}的使用

springboot项目yml文件中${}的使用,以及使用idea配置环境变量

weixin_45371233的博客 6251

实用电路精讲系列---仪表放大器

摘要 仪表放大器通过三级运放架构实现高共模抑制比(CMRR>100dB)和精密差分放大,其核心是第一级同相运放提供高输入阻抗和可调增益(G=1+2R/RG),第二级差分运放消除共模干扰。具有低失调(≤50μV)、低温漂(≤0.6μV/℃)特性,广泛应用于智能断路器电流监测、ECG心电信号放大等场景。典型电路采用LTC1049运放,通过匹配电阻网络实现199倍差分增益,结合输出缓冲确保信号稳定性。设计时需注意输入共模电压范围限制和增益电阻精度,优选集成IC(如AD620、INA128)以规避分立元件匹配

weixin_40590799的博客 2077

Logisim 原码一位乘法器设计 图解及代码(计算机组成原理)

Logisim 原码一位乘法器设计 图解及代码(计算机组成原理) 包对

醉蕤的博客 4379

springboot项目yml文件中使用${}配置

springboot项目中yml文件使用${}符号配置

黑桃A的博客 4090

防火墙学习5---虚拟系统和跟系统通过路由表互访

虚拟系统与跟系统互访可分为虚拟系统访问根系统和跟系统访问虚拟系统。

weixin_48030849的博客 1032

yml文件没有变成配置文件图标(IDEA)

问题处理

m0_47943986的博客 1839

canoe安装完成开启之后因为VectorDeviceParams30_64.dll报错崩溃打不开...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1081

华为OD机试2025C卷 - 精准核酸检测 (C++ & Python & JAVA & JS & GO)

华为OD机试2025C卷 精准核酸检测,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1710

【Spring Boot】SpringBoot 配置文件详解

文章目录1. 配置文件的作用2. 配置文件的格式3. properties 配置文件说明3.1 properties 基本语法3.2 properties 配置缺点分析4. yml 配置文件说明4.1 yml 基本语法4.2 yml 配置简单的数据类型及 null4.3 yml 配置对象4.4 yml 配置 list 集合5. properties 和 yml 的总结6. Spring Boot 读取配置文件的方法6.1 使用 @Value 读取配置文件6.2 使用 @ConfigurationProper

吞吞吐吐大魔王的博客 6523

【C++】开源:cpp-httplib HTTP协议库配置与使用

cpp-httplib HTTP协议库配置与使用

DevFrank的博客 5542

【Spring Boot】SpringBoot介绍及环境配置

本篇博客深入浅出地介绍了SpringBoot,包括其定义、特性、为何选择SpringBoot,以及如何配置和运行SpringBoot项目。此外,还解析了SpringBoot项目的目录结构和主要配置文件。这是学习SpringBoot的良好开端,帮助你快速上手创建和运行企业级Java应用。

Ricky的博客 5401

【保姆级教程】基于UNet++&MobileNetv3的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv3作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

FJN110的博客 256

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【SpringBoot框架03】Spring Boot 配置

【SpringBoot框架03】Spring Boot 配置 思维导图 一、基本配置 (1)创建maven普通java项目,添加坐标依赖,导入相关插件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="htt

binflcy的博客 592

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SpringBoot ——Spring Boot日志配置

Spring Boot 采用了 slf4j+logback 的组合形式,Spring Boot也提供对JUL、log4j2、Logback提供了默认配置 1、默认日志配置 修改日志默认级别 2、修改日志默认配置 修改日志文件生成路径 ​ ​ 修改日志输出格式 ​ 3、日志底层实现 在web项目中,引用了spring-boot-starter-web依赖,SpringBoot中默认日志启动器为spring-boot-starter-logging,默认采用的是logback日志.

qq_43842093的博客 958

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SpringBoot是如何简化配置的

Spring Boot 还支持自定义配置,我们可以根据特定的需求来自定义应用程序的配置。我们可以使用注解来定义自定义配置类,并使用@Bean注解来定义 Bean。@Bean在这个示例中,我们定义了一个 AppConfig 类,并使用注解来标识这个类是一个配置类。在这个类中,我们使用@Bean注解来定义一个 RestTemplate Bean。这个 Bean 可以在应用程序中使用,例如发送 HTTP 请求。我们还可以在配置类中使用@Value注解来注入配置文件中的属性。

u013749113的博客 2187

【SpringBoot】SpringBoot的配置,SpringBoot的配置文件

【SpringBoot】SpringBoot的配置,SpringBoot的配置文件1. SpringBoot的配置1.1 通过java类配置连接池1.2 SpringBoot的属性注入1.2.1 @Autowired注入1.2.2 构造函数注入1.2.3 @Bean方法的参数注入1.2.4 在@Bean方法上使用@ConfigurationProperties1.2.5 使用springboot属性注入的优势1.3 SpringBoot的默认配置2. SpringBoot的配置文件2.1 yml配置文件简介

来日浅谈的博客 1285

springboot配置

IntelliJ IDEA 中SpringBoot对Run/Debug Configurations配置 SpringBoot热部署 运行一个SpringBoot多模块应用 使用SpringBoot配置启动: Use classpath of module选中要运行的模块 VM options:内部配置参数 -Dserver.port=8080 -Dspring.profiles.active=test -Ddebug server.port可以设置端口号,spring.profiles.ac

柒七的博客 1681

[springboot] Spring Boot配置文件详解

springboot采纳了建立生产就绪Spring应用程序的观点。 Spring Boot优先于配置的惯例,旨在让您尽快启动和运行。在一般情况下,我们不需要做太多的配置就能够让spring boot正常运行。在一些特殊的情况下,我们需要做修改一些配置,或者需要有自己的配置属性。 一、自定义属性 当我们创建一个springboot项目的时候,系统默认会为我们在src/main/java/reso...

Boone的博客 542

Maven打包SpringBoot项目,以及SpringBoot配置加载的优先级

这个过程不仅会把应用程序本身及其所有依赖打包在一起,还会修改 JAR 文件的 MANIFEST.MF 文件,添加必要的属性如 Main-Class 和 Start-Class 等,这些是 Spring Boot 应用启动所需的。我们知道,SpringBoot支持使用 application-{profile}.yml 隔离生产(prod) 和 开发(dev)环境 的配置,只需要修改 spring.profile.sactive = {profile} 的 profile就能切换到对应的配置。

qq_54655539的博客 1198

springboot基础篇—SpringBoot 配置

一旦这个配置类生效,这个配置类就会给容器中添加各种组件,这些组件的属性是从对应的 properties 类中获取的,而这些 properties 类里面的每一个属性又是和配置文件绑定的。配置文件能配置什么就可以参照某个功能对应的这个属性类。,这样启动项目的时候 Spring 将会加载从指定的位置加载配置文件,执行的配置文件和默认加载的这些配置文件共同起作用形成互补配置。●④ 给容器自动配置类添加组件的时候,会从 properties 类中获取某些属性,我们就可以在配置文件中指定这些属性的值。

砥砺前行的博客 6484

Springboot的自动化配置流程

从springboot的入门案例中,我们可以体会到springboot的便捷之处,使用Spring Initializer创建一个项目,然后写一个controller层就可以运行起来,我们啥也没配置,没配置tomcat、没配置mvc、没配置spring。。。。因为springboot底层都帮我们配置好了,而springboot的精髓就在于自动配置 然后不得不提一下springboot的四大特性: 自动装配 Starter添加项目依赖 Spring Boot CLI与Groovy的高效配合 Spri

weixin_46300935的博客 1106

SpringBoot配置文件

其中,yml 和 properties 的区别 类似与商品的新旧包装,properties类型的配置文件就属于旧包装,也就是是创建SpringBoot项目时默认的文件格式(仓库里还有库存),而yml属于新包装。我们可以发现: 当 .properties 和 .yml 共存时,两个配置文件都会加载,而当配置文件内容存在冲突时,其中,yml是yaml的简写,使用频率较高,yaml与yml的使用方式是。的,因此我们学习了yml文件的使用后,也就能够使用yaml文件。

2301_76161469的博客 2371

SpringBoot基本配置

提示:本文为SpringBoot整合篇第一篇,基本配置和运行SpringBoot项目本文目的:作为记录和分享。

hongs468的博客 4096
上一篇: SpringBoot项目创建
下一篇: linux文件系统的目录结构笔记
magicproblem
博客等级 码龄7年 22粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值