首页>>后端>>SpringBoot->SpringBoot属性配置文件数据注入配置和yml与properties区别

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

时间:2023-11-29 本站 点击:0

前言

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

快速配置

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

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

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

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

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

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

student.name=kenxstudent.age=23

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

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

@Component 添加到spring ioc容器中,@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=lucy
packagecom.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

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

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

默认属性和参数引用

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

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

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

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

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

作者:kenx


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/SpringBoot/371.html