前言

我们知道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注解进行了默认继承

  1. resources文件下新增application.properties文件,配置对应的属性
student.name=kenx
student.age=23
  1. 新增java bean 把对应的属性注入到java bean中对应字段使用@Value注解将属性值注入到对应属性上。
@Component
@Data
public class User {
@Value("${student.name}")
private String name;
@Value("${student.age}")
private Integer age;
}

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

  1. 写用例测试
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.NONE,
classes = cn.soboys.kmall.api.ApiApplication.class)
public class PropertiesTest { @Autowired
private User properties; @Test
public void a(){
String a= String.format( "student name is %s student age is %s",properties.getName(),properties.getAge());
System.out.println(a);
}
}

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

2021-09-08 10:53:02 INFO  background-preinit org.hibernate.validator.internal.util.Version HV000001: Hibernate Validator 6.1.7.Final
2021-09-08 10:53:02 INFO main PropertiesTest Starting PropertiesTest using Java 1.8.0_202 on xiangyongdeMacBook-Pro.local with PID 45463 (started by xiangyong in /Users/xiangyong/selfProject/project/kmall/kmall-api)
2021-09-08 10:53:02 INFO main PropertiesTest The following profiles are active: test,mptest
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.4.1
2021-09-08 10:53:08 INFO main PropertiesTest Started PropertiesTest in 6.132 seconds (JVM running for 7.783) student name is kenx student age is 23
  1. @ConfigurationProperties注解将属性值绑定到结构化的beans

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

@Component
@Data
@ConfigurationProperties(prefix = "student")
public class User {
private String name;
private Integer age;
}

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

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

test.id=100
test.name=lucy
package com.lzx.springboot01demo.pojo;

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

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

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

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

  3. @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=v1
person.map.k2=v2
#配置对象type属性
person.pet.type=dog
#配置对象name属性
person.pet.name=旺财

application.y(a)ml配置文件

  1. value值为普通数据类型(例如:数字、字符串、布尔)
server:
port: 8081
path: /hello
  1. value值为数组或单列集合

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

缩进式写法1

person:
hobby:
- play
- read
- sleep

缩进式写法2

person:
hobby:
play,
read,
sleep

行内式写法:

person:
hobby: [play,read,sleep]
  1. value值为Map或对象

缩进式写法

person:
map:
k1: v1
k2: v2

行内式写法:

person:
map: {k1: v1, k2: v2}

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

如果配置的属性是已有属性,例如服务端口server.port,那么Spring Boot会扫描并读取这些配置属性,覆盖已有的默认配置;

如果配置的是自定义属性,则还需要在程序中注入这些配置属性方可生效

默认属性和参数引用

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

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

# 配置随机值
my.secret=${random.value}
# 配置随机整数
my.number=${random.int}
# 配置随机long类型的整数
my.bigbumber=${random.long}
# 配置uuid
my.uuid=${random.uuid}
# 配置小于10的整数
my.number.less.than.ten=${random.int(10)}
# 配置范围在[1024,65536]的随机整数
my.number.in.range=${random.int[1024,65536]}

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

# 参数间引用
app.name=MyApp
app.description=${app.name} is a Spring Boot application

SpringBoot 属性配置文件数据注入配置和yml与properties区别的更多相关文章

  1. SpringBoot:配置文件及自动配置原理

    西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...

  2. springboot(3)——配置文件和自动配置原理详细讲解

    原文地址 目录 概述 1. 配置文件作用 2.配置文件位置 3.配置文件的定义 3.1如果是定义普通变量(数字 字符串 布尔) 3.2如果是定义对象.Map 3.3如果是定义数组 4.配置文件的使用 ...

  3. SpringBoot(二): SpringBoot属性配置文件 SpringBoot多环境配置文件 SpringBoot自定义配置文件

    1.属性配置文件 一共分为两种,一种是键值对的properties属性配置文件,一种是yaml格式的配置文件 properties配置: 2.多环境配置文件 当我们的项目中有多套配置文件 比如开发的配 ...

  4. SpringBoot之配置文件的注入

    @PropertySource&@ImportResource&@Bean @PropertySource:加载指定的配置文件: /** * 将配置文件中配置的每一个属性的值,映射到这 ...

  5. SpringBoot 读取配置文件数据

  6. SpringBoot之配置文件加载位置

    1.SpringBoot启动会扫描application.properties或者application.yml文件作为springboot的配置文件.默认创建项目生成application.prop ...

  7. Springboot 获取yml、properties参数

    获取properties或yml文件的配置数据(两种方法)(默认的application文件或者自定义的yml和properties) 1.使用@Value()注解 1.1 配置数据 如:在prope ...

  8. springBoot+mysql+mybatis demo [基本配置] [遇到的问题]

    springBoot+mysql+mybatis的基本配置: 多环境 application.properties spring.profiles.active=dev spring.applicat ...

  9. 3springboot:springboot配置文件(配置文件、YAML、属性文件值注入<@Value、@ConfigurationProperties、@PropertySource,@ImportResource、@Bean>)

    1.配置文件: springboot默认使用一个全局配置文件 配置文件名是固定的   配置文件有两种(开头均是application,主要是文件的后缀): ->application.prope ...

随机推荐

  1. 漫谈CUDA优化

    ​ 作者:Lawliet 翻译:仿佛若有光 前言: 几个月前,我根据 Simoncelli 2016 年的论文编写了自己的自动编码器,用于研究目的.一开始,我想使用一些流行的深度学习框架(例如 Ten ...

  2. JS基础-数据类型判断typeof、instanceof、Object.prototype.toString

    typeof用在基本数据类型和函数时,返回其对应类型的描述,对于引用类型都返回为object. instanceof无法判断基本数据类型,对于引用类型数据,返回其其对应类型. Object.proto ...

  3. JVM 常用监控工具

    概述 给一个系统定位问题的时候,知识.经验是关键基础,数据是依据,工具是运用知识处理数据的手段. 这里说的数据包括但不限于异常堆栈.虚拟机运行日志.垃圾收集器日志.线程快照(threaddump/ja ...

  4. Android系统编程入门系列之服务Service齐头并进多线程任务

    在上篇文章中初步了解了Android系统的四大组件之一的服务Service,在服务内可以执行无用户交互的耗时操作任务,但是包括之前关于界面系列文章在内,生命周期方法都是在主线程内被系统回调的.如果直接 ...

  5. Spring Security项目的搭建以及Spring Security的BCrypt加密

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  6. 常用的IDEA快捷键

    常用的IDEA快捷键 代码右移:TAB键 代码左移:shift+TAB键 代码上移:shift+alt +方向键上 代码下移:shift+alt +方## 标题向键下 格式化代码 : ctrl +sh ...

  7. 徒手打造基于Spark的数据工厂(Data Factory):从设计到实现

    在大数据处理和人工智能时代,数据工厂(Data Factory)无疑是一个非常重要的大数据处理平台.市面上也有成熟的相关产品,比如Azure Data Factory,不仅功能强大,而且依托微软的云计 ...

  8. STM32—ADC详解

    文章目录 一.ADC简介 二.ADC功能框图讲解 1.电压输入范围 2.输入通道 3.转换顺序 4.触发源 5.转换时间 6.数据寄存器 7.中断 8.电压转换 三.初始化结构体 四.单通道电压采集 ...

  9. WinForm嵌入Web网页的解决方案

    企业级信息化系统绝大部分采用BS架构实现,如门户网站.OA系统.电商网站等,通过浏览器输入Web网址即可访问,对于使用者来说非常便捷,对于开发维护者来说也非常方便,程序维护只需更新服务器即可,使用者无 ...

  10. VMware上安装的Ubuntu不显示全屏解决方法

    花费了好一会才把电脑上的Vmware装上,把Ubuntu装到虚拟机上,谁知道Ubuntu不显示全屏,我调了分辨率,奈何Ubuntu里面固定的分辨率没有跟我电脑匹配的,然后开始寻找解决方法,在网上找了很 ...