SpringBoot属性配置文件数据注入配置和yml与properties区别

如题所述

第1个回答  2024-09-19
前言

我们知道SpringBoot通过配置类来解放一堆的xml文件配置,通属性配置文件,来进行,系统全局属性配置,这样极大的简化了我们开发过程,javaweb也可以甜甜的从此。

快速配置

SpringBoot默认加载支持application*.properties、application*.yaml和application*.yml三种拓展名结尾的全局属性配置文件处理

它们顺序优先级为:application*.properties>application*.yaml>application*.yml

即在application.properties或application.yml等文件中添加属性配置

可以使用@Value注解将属性值注入到beans中,或使用@ConfigurationProperties注解将属性值绑定到结构化的beans中

@Value是Spring框架提供的注解,用来读取配置文件中的属性并逐个注入到Bean对象对应的属性中,SpringBoot框架对Spring框架的@Value注解进行了默认继承

在resources文件下新增application.properties文件,配置对应的属性

student.name=kenxstudent.age=23

新增javabean把对应的属性注入到javabean中对应字段使用@Value注解将属性值注入到对应属性上。

@Component@DatapublicclassUser{@Value("${student.name}")privateStringname;@Value("${student.age}")privateIntegerage;}

@Component添加到springioc容器中,@Data添加getter,setter

写用例测试

@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.NONE,classes=cn.soboys.kmall.api.ApiApplication.class)publicclassPropertiesTest{@AutowiredprivateUserproperties;@Testpublicvoida(){Stringa=String.format("studentnameis%sstudentageis%s",properties.getName(),properties.getAge());System.out.println(a);}}

我看可以看到控制台正常打印,数据注入成功

2021-09-0810:53:02INFObackground-preinitorg.hibernate.validator.internal.util.VersionHV000001:HibernateValidator6.1.7.Final2021-09-0810:53:02INFOmainPropertiesTestStartingPropertiesTestusingJava1.8.0_202onxiangyongdeMacBook-Pro.localwithPID45463(startedbyxiangyongin/Users/xiangyong/selfProject/project/kmall/kmall-api)2021-09-0810:53:02INFOmainPropertiesTestThefollowingprofilesareactive:test,mptest__|___|_.____|_|||\/|_)(_|||_\|_)||_|_\/|3.4.12021-09-0810:53:08INFOmainPropertiesTestStartedPropertiesTestin6.132seconds(JVMrunningfor7.783)studentnameiskenxstudentageis23

@ConfigurationProperties注解将属性值绑定到结构化的beans

上面通过@Value一个·一个注入很不方便

@Component@Data@ConfigurationProperties(prefix="student")publicclassUser{privateStringname;privateIntegerage;}

这样极大简化代码,对于属性比较多,结构化bean,很有必要可以通过@ConfigurationProperties(prefix="student")这种方式指定前缀

当然有时候我们需要自定义加载属性配置文件使用@PropertySource加载配置文件

test.id=100test.name=lucypackagecom.lzx.springboot01demo.pojo;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.boot.context.properties.EnableConfigurationProperties;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.PropertySource;@Configuration//自定义配置类@PropertySource("classpath:test.properties")//指定自定义配置文件位置和名称@EnableConfigurationProperties(MyProperties.class)//开启对应配置类的属性注入功能@ConfigurationProperties(prefix="test")//指定配置文件注入属性前缀publicclassMyProperties{privateIntegerid;privateStringname;//省略getter/setter方法//省略toString()方法}

1.@Configuration注解表示当前类是一个自定义配置类,并添加为Spring容器的组件,也可使用传统的@Component注解

@PropertySource("classpath:test.properties")指定自定义配置文件位置和名称

@ConfigurationProperties(prefix="test")指定将配置文件中前缀为test的属性注入到配置类的属性中

@EnableConfigurationProperties(MyProperties.class)表示开启对应配置类的属性注入功能,如果配置类上使用的是@Component注解而非@Configuration,@EnableConfigurationProperties(MyProperties.class)注解可以省略

application.properties配置文件#配置数字person.id=1#配置字符串person.name=tom#配置List集合person.hoby=吃饭,睡觉,打豆豆#配置String[]数组person.family=father,mother#配置map集合person.map.k1=v1person.map.k2=v2#配置对象type属性person.pet.type=dog#配置对象name属性person.pet.name=旺财application.y(a)ml配置文件

value值为普通数据类型(例如:数字、字符串、布尔)

server:port:8081path:/hello

value值为数组或单列集合

主要有两种写法:缩进式写法和行内式写法;其中缩进式写法又有两种写法:

缩进式写法1:

person:hobby:-play-read-sleep

缩进式写法2:

@Component@DatapublicclassUser{@Value("${student.name}")privateStringname;@Value("${student.age}")privateIntegerage;}0

行内式写法:

@Component@DatapublicclassUser{@Value("${student.name}")privateStringname;@Value("${student.age}")privateIntegerage;}1

value值为Map或对象

缩进式写法:

@Component@DatapublicclassUser{@Value("${student.name}")privateStringname;@Value("${student.age}")privateIntegerage;}2

行内式写法:

@Component@DatapublicclassUser{@Value("${student.name}")privateStringname;@Value("${student.age}")privateIntegerage;}3

注意使用SpringBoot全局配置文件设置属性时,

如果配置的属性是已有属性,例如服务端口server.port,那么SpringBoot会扫描并读取这些配置属性,覆盖已有的默认配置;如果配置的是自定义属性,则还需要在程序中注入这些配置属性方可生效

默认属性和参数引用

SpringBoot属性配置文件中默认给我们提供了一些特有的全局属性参数值我们可以直接获取

使用SpringBoot内嵌的RandomValuePropertySource类进行随机值注入。

@Component@DatapublicclassUser{@Value("${student.name}")privateStringname;@Value("${student.age}")privateIntegerage;}4

当然我们也可以自定义引用自己定义的值

@Component@DatapublicclassUser{@Value("${student.name}")privateStringname;@Value("${student.age}")privateIntegerage;}5

作者:kenx

logo设计

创造品牌价值

¥500元起

APP开发

量身定制,源码交付

¥2000元起

商标注册

一个好品牌从商标开始

¥1480元起

公司注册

注册公司全程代办

¥0元起

    官方电话官方服务
      官方网站八戒财税知识产权八戒服务商企业需求数字市场

SpringBoot属性配置文件数据注入配置和yml与properties区别_百度...
ConfigurationProperties(prefix="test")指定将配置文件中前缀为test的属性注入到配置类的属性中 EnableConfigurationProperties(MyProperties.class)表示开启对应配置类的属性注入功能,如果配置类上使用的是@Component注解而非@Configuration,@EnableConfigurationProperties(MyProperties.class)注解可以省略 application....

面试突击74:properties和yml有什么区别?
properties与yml在Spring Boot中作为配置文件,是两种不同的形式。properties格式是早期版本默认配置方式,而yml则是其升级版。区别主要在四点:定义与定位不同,语法不同,yml支持多种数据类型配置,以及yml的通用性更好。从定义和定位来看,properties专注于属性配置,而yml作为另一种标记语言,其定位更广泛...

springboot的配置文件有哪几种
1. properties文件:这是Spring Boot的默认配置文件格式,它采用的是键值对的形式存储配置信息,键值对之间通过等号“=”进行连接。比如:arduino server.port=8080 spring.datasource.url=jdbc:mysql:\/\/localhost\/test 这种格式的优点在于它的简洁易读,上手难度低。缺点则是当配置信息复杂且数量众多时,容...

spring boot的配置文件有哪几种格式
Spring Boot的配置文件主要有三种格式,它们分别是:properties格式,YAML格式和JSON格式。properties格式:properties是最常见和基本的配置文件格式,它是以key=value的形式来保存配置信息的。在Spring Boot中,我们通常在application.properties文件中保存应用的配置信息。例如:makefile server.port=8080 app.name...

SpringBoot的配置文件有哪几种格式?
SpringBoot中的配置文件主要有三种格式,properties、yaml、和xml方式。- 其中properties格式配置文件后缀是.properties,配置项为:server.port = 9090 - yaml格式配置文件后缀是.yml,配置项是:server.port: 9090 在SpringBoot中,使用最广泛的配置文件是yaml,yaml之所以流行,除了他配置语法精简之外,还...

SpringBoot-配置
在SpringBoot中,配置文件的管理是其强大之处的一个体现。默认情况下,SpringBoot提供了默认配置,但为了自定义设置,可以使用application.properties 或者 application.yml 文件进行配置。两种格式的对比:properties:简洁明了,主要适用于简单的键值对配置。yml (yaml):更易读,支持数据序列化,适合更复杂的...

springboot.yml和.properties配置文件的加载顺序?
加载顺序方面,Spring Boot遵循特定顺序加载配置文件:application-{profile}.properties、application.properties、application-{profile}.yml、application.yml。高优先级属性覆盖低优先级属性,如在应用中同时定义了server.port和spring.datasource.url,最终属性值将由优先级较高的文件决定。以上内容涵盖了...

【SpringBoot】YAML 配置文件
SpringBoot支持三种配置文件类型:properties、yml和yaml。在配置端口号时,这三种方式各有特色。properties文件以键值对形式存在,yml和yaml是同一种格式,只是书写上yml更常见。SpringBoot会根据优先级加载这三种文件,通常yaml或yml的配置会被优先考虑,因为它们提供更丰富的配置信息。SpringBoot还提供了代码...

Spring Boot学习02_配置(踩坑)
配置文件的值可以通过@ConfigurationProperties和@Value注解进行注入。@ConfigurationProperties用于批量绑定配置文件属性,而@Value则逐个注入。两者在功能、松散语法支持、校验和复杂类型注入等方面有所不同。Spring Boot推荐使用@Configuration和@Bean注解进行组件的添加和管理,@PropertySource和@ImportResource则用于...

springboot获取配置文件值(springboot从配置中心获取属性文件)
首先,在SpringBoot中,有两种配置文件的方式。一种是application.properties,另一种application.yaml(或者是application.yml)。我们在做微服务项目时候会引入springcloud框架,对于配置文件我们就会通过springcloudconfig来配置,实现线上环境动态修改配置文件属性而不需要重新打jar包。第三步:删除原有的...

相似回答
大家正在搜