示例

user:
name: zhaotian
age: 18
sex: 男

@Value注解

@Value注解是Spring框架提供的用于注入配置属性值的注解,它可用于类的成员变量、方法参数和构造函数参数上。

@Data
@Component
public class MyBean { @Value("${user.name}")
private String name;
@Value("${user.age}")
private int age;
}

调用方式

@Service
public class Test { @Autowired
private MyBean myBean; public void test(){
String name = myBean.getName();
}
}

静态变量static

@Data
@Component
public class MyBean { public static String name;
@Value("${user.name}")
public void setName(String name){
this.name = name;
}
// 调用方式:MyBean.name; private static Integer age;
@Value("${user.age}")
public void setAge(Integer age){
this.age = age;
}
public Integer getAge(){
return age;
}
// 调用方式:MyBean.getAge();
}

@ConfigurationProperties注解

@ConfigurationProperties注解是 SpringBoot 提供的一种更加便捷来处理配置文件中的属性值的方式,可以通过自动绑定和类型转换等机制,将指定前缀的属性集合自动绑定到一个Bean对象上。

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class MyBean { private String name;
private int age; // 调用方式如同@Value()一样
}

静态变量static

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class MyBean { public static String name;
public void setName(String name){
this.name = name;
}
// 调用方式:MyBean.name; private static Integer age;
public void setAge(Integer age){
this.age = age;
}
public Integer getAge(){
return age;
}
// 调用方式:MyBean.getAge();
}

@PropertySources 注解

使用自定义的配置文件,自定义的配置文件无法被应用自动加载,需要我们手动指定加载。

@PropertySources 注解只内置了PropertySourceFactory适配器,也就是说它只能加载.properties文件。

如果你想要加载一个.yaml类型文件,则需要自行实现yaml的适配器。

使用示例

在 src/main/resources/ 目录下创建自定义配置文件 redis.properties

redis.ip=127.0.0.1
redis.port=6379

在需要使用自定义配置文件的类上添加 @PropertySource 注解。

@Data
@Configuration
@PropertySource("classpath:classpath:redis.properties")
public class RedisConfig { @Value("${redis.ip}")
private String ip; @Value("${redis.port}")
private String port;
}

还可以指定多个配置文件,用逗号隔开。如下:

@PropertySources({
@PropertySource(value = "classpath:redis.properties",encoding = "utf-8"),
@PropertySource(value = "classpath:mysql.properties",encoding = "utf-8")
})
public class TestConfig {
}

@YamlComponent注解

如果yml文件中用---分隔了多个文档,我们可以使用@YamlComponent注解将每份文档映射到一个bean上,如:

user:
name: jack
---
user:
name: mary
@Component("first")
@YamlComponent(value = "user.first")
public class FirstProps {
  private String name;
} @Component("second")
@YamlComponent(value = "user.second")
public class SecondProps {
  private String name;
}

自定义读取

如果上边的几种读取配置的方式你都不喜欢,我们可以直接注入PropertySources获取所有属性的配置队列。

@Slf4j
@SpringBootTest
public class CustomTest { @Autowired
private PropertySources propertySources; @Test
public void customTest() {
for (PropertySource<?> propertySource : propertySources) {
log.info("自定义获取 配置获取 name {} ,{}", propertySource.getName(), propertySource.getSource());
}
}
}

SpringBoot读取配置文件的几种方式的更多相关文章

  1. Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!

    在项目开发中经常会用到配置文件,之前介绍过Spring Boot 资源文件属性配置的方法,但是很多朋友反馈说介绍的不够详细全面.所以, 今天完整的分享Spring Boot读取配置文件的几种方式! S ...

  2. .net core 读取配置文件的几种方式

    一.Json配置文件 1.这里的配置文件指的是下图 2.json配置文件示例 { "Logging": { "LogLevel": { "Defaul ...

  3. Springboot读取配置文件的两种方法

    第一种: application.yml配置中的参数: zip: Hello Springboot 方法读取: @RestController public class ControllerTest ...

  4. Spring Boot读取配置文件的几种方式

    Spring Boot获取文件总的来说有三种方式,分别是@Value注解,@ConfigurationProperties注解和Environment接口.这三种注解可以配合着@PropertySou ...

  5. spring-boot-route(二)读取配置文件的几种方式

    Spring Boot提供了两种格式的配置文件,分别是properties 和 yml.Spring Boot最大的特点就是自动化配置,如果我们想修改自动化配置的默认值,就可以通过配置文件来指定自己服 ...

  6. java 学习笔记 读取配置文件的三种方式

    package com.itheima.servlet.cfg; import java.io.FileInputStream; import java.io.FileNotFoundExceptio ...

  7. 关于spring读取配置文件的两种方式

    很多时候我们把需要随时调整的参数需要放在配置文件中单独进行读取,这就是软编码,相对于硬编码,软编码可以避免频繁修改类文件,频繁编译,必要时只需要用文本编辑器打开配置文件更改参数就行.但没有使用框架之前 ...

  8. Servlet读取配置文件的三种方式

    一.利用ServletContext.getRealPath()[或getResourceAsStream()] 特点:读取应用中的任何文件.只能在web环境下. private void text3 ...

  9. SpringBoot中读取配置文件的几种方式

    1.读取application文件 在application.yml或者properties文件中添加: info: name: xiaoming age: 13 sex: 1 读取方式如下: imp ...

  10. Spring 读取配置文件的俩种方式

    读取配置可通过 org.springframework.core.env.Environment 类来获取, 也可以通过@Value的方式来获取 注解形式: @PropertySource({&quo ...

随机推荐

  1. ansible系列(32)--ansible实战之部署WEB集群架构(2)

    1. 基础环境role编写 创建基础环境role的相关目录: [root@xuzhichao cluster-roles]# mkdir base-module/{tasks,handlers,fil ...

  2. VNC远程控制软件是什么?有没有更好的远程桌面控制解决方案?

    看官老爷们,你们是否需要远程访问或远程支持解决方案?来了解下VNC吧. 什么是VNC? VNC是虚拟网络计算(VNC)是一种远程桌面共享技术,用于从世界任何地方远程访问和控制计算机. VNC的工作原理 ...

  3. HTTP 连接详解

    概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器.一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失.受损或失序 T ...

  4. zabbix第二篇

    常用命令 查看版本 [root@zabbix001 xx]# zabbix_server -V zabbix_server (Zabbix) 4.2.8 Revision cb5d5b10f4 28 ...

  5. 零代码零硬件玩转华为云IoT,基于设备联动实时监控设备

    本文分享自华为云社区<一键守护,实时洞察:华为云IoT设备联动,智能感知设备状态变化,精准触发告警通知[零代码零硬件玩转华为云IoT]>,作者:周周的奇妙编程. 前言 在前面我们已经体验过 ...

  6. starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.

    在线求解[已解决] 问题 D:\persioninto_exe\soft\jdk1.8.0_322\bin\java.exe -XX:TieredStopAtLevel=1 -noverify -Ds ...

  7. Android 13 - Media框架(33)- ACodec(九)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 前一节我们学习了Output Format Changed事件是如何上抛并且被处理的,这一节我们紧接着来学习OutputBuffer是如何上抛并且被 ...

  8. React 中的 useRef 与 useState

    React 是一个流行的 JavaScript 库,用于构建用户界面.它提供了几个钩子,使开发人员能够管理状态并执行副作用. React 中两个常用的钩子是 useRef 和 useState .虽然 ...

  9. C++笔记(8)常规new运算符和定位new运算符

    通常,new负责在堆(heap)中找到一个能够满足要求的内存块.new运算符还有一种变体,被称为定位(placement)new运算符,他能让你能够指定要使用的位置.程序员可以使用这种特性来设置其内存 ...

  10. C语言-使用malloc导致的奔溃问题

    在使用malloc.memset.free的过程中,出现了程序奔溃,大致现象如下. 程序的实现大致如下: #include <stdio.h> #include <stdlib.h& ...