示例

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. HTML link标签中preload,prefetch,dns-prefetch,preconnect,prerender

    Preload 在我们的浏览器加载资源的时候,对于每一个资源都有其自身的默认优先级,倘若我们能修改每一个资源的默认优先级,那我们几乎可以按照我们的预期加载想要加载的资源. 以谷歌浏览器为例,我们打开控 ...

  2. kapt构建报错

    报错信息: Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodExce ...

  3. UE4 绘制Gizmo

    Unity的Gizmos可以很方便的在编辑器下进行调试,Unreal中也有一些办法可以达到效果. 本文主要参考:https://zhuanlan.zhihu.com/p/363625037,进行了一些 ...

  4. Spring源码阅读 ------------------- SpringFrameWork 5.2 +IDEA 部署其他坑位问题(二)

    一.地址下jar包无法下载问题   报错信息:      Could not get resource 'https://plugins.gradle.org/m2/org/asciidoctor/o ...

  5. 鸿蒙HarmonyOS实战-Stage模型(应用上下文Context)

    前言 应用上下文(Context)是应用程序的全局信息的接口.它是一个抽象类,提供了访问应用程序环境的方法和资源的方法.应用上下文可以用于获取应用程序的资源.启动Activity.发送广播等.每个应用 ...

  6. Django——admin后台上传文件

    from django.db import models class Mytb(models.Model): file = models.FileField(upload_to='uploads/') ...

  7. C#异步调用Process(),后台静默调用cmd控制台

    C#调用cmd控制台操作,网上有太多的教程了,但是大多数都是执行完一条指令,退出Process,下次执行指令,再次new Process(),(只为了接收到cmd指令的回复,不然会进程阻塞,程序至此不 ...

  8. linux下基于官方源码编译ipopt

    linux下基于官方源码编译ipopt 1.C++依赖项安装升级 由于需要编译c++所以需要安装一系列的依赖: apt-get update apt-get -y upgrade apt instal ...

  9. Yii框架Ar操作

    1.$admin=Admin::model()->findAll($condition,$params);        该方法是根据一个条件查询一个集合,如:  findAll("u ...

  10. vue带有参数的路由跳转 动态路由

    先定义好路由在router文件下面创建一个新的文件夹里面写上自己定义的路由 export default {   path: '/detail/:id',   component: () =>  ...