当前位置: 代码网 > it编程>编程语言>Java > SpringBoot读取配置文件的四种方式

SpringBoot读取配置文件的四种方式

2024年08月21日 Java 我要评论
引言在 spring boot 中,application.yml文件用于配置应用程序的属性,spring boot 默认会从src/main/resources目录下的application.pro

引言

在 spring boot 中,application.yml 文件用于配置应用程序的属性,spring boot 默认会从 src/main/resources 目录下的 application.properties 或 application.yml 文件中读取配置。读取 application.yml 文件中的配置可以通过以下几种常用的方法进行:

  1. @value: 适合读取简单的单一属性。
  2. @configurationproperties: 适合读取复杂的配置集。
  3. environment: 适合在运行时动态访问配置。
  4. @propertysource: 加载 .properties 文件。

1. @value 注解读取单个属性

@value 注解用于读取单一简单的配置属性,该注解可以直接应用于字段、构造函数或方法参数上,不要求提供 setter 方法。

  1. 在 application.yml 配置文件中添加如下配置:

app:
  name: myapp
  keys:
    - key1
    - key2

使用 @value 注解从配置文件中读取单个属性值:

  • 字段注入:将 @value 注解应用于字段,spring 将直接将配置值注入到字段中。
@component
public class mycomponent {

    @value("${app.name}")
    private string name;

}
  • 构造函数注入@value 也可以用于构造函数参数。
@component
public class mycomponent {

    private final string name;

    public mycomponent(@value("${app.name}") string name) {
        this.name = name;
    }

}
  • 方法参数注入@value 注解用于方法参数。
@component
public class mycomponent {

    private string name;

    @value("${app.name}")
    public void setkeys(string name) {
        this.name = name;
    }

}

注意:@value 注解无法处理复杂的配置,如集合,如下处理会在应用启动时抛出 illegalargumentexception 异常:could not resolve placeholder 'app.keys' in value "${app.keys}"

@value("${app.keys}")
private list<string> keys;

2. 使用 @configurationproperties 注解

@configurationproperties 用于将配置文件中的属性绑定到 java 对象中。适合处理结构化的配置,比如嵌套的属性或复杂的属性集合。

  • 在 application.yml 配置文件中添加如下配置:
app:
  name: myapp
  keys:
    - key1
    - key2

在类上使用 @configurationproperties 注解,并指定前缀,该类会直接映射配置文件中的属性名一致属性:

@component
@configurationproperties(prefix = "app")
public class appproperties {

    private list<string> keys;

}

注意:@configurationproperties 读取配置时需要确保配置文件中的属性名与 java 类中的属性名匹配。

3. 通过 environment 对象读取属性

environment 是 spring 中用于管理和访问配置属性、配置文件和环境变量的一个抽象接口,该对象提供了一种管理和访问配置属性、激活的配置文件和环境变量的统一方式。我们可以在任何 spring 管理的 bean 中通过注入 environment 对象来获取配置属性。

  • 在 application.yml 配置文件中添加如下配置:
app:
  name: myapp
  keys:
    - key1
    - key2
  • 在类中注入 environment 对象,使用env.getproperty(string key)来检索属性的值。
@component
public class mycomponent {

    @autowired
    private environment env;

    public void printconfig() {
        string port = env.getproperty("server.port");
        system.out.println("server port: " + port);
    }
}

注意:environment 在加载 yml 配置文件时,会将每个元素视为单独的键。

即 application.yml 文件中的配置:

yamlcopy codeapp:
  keys:
    - key1
    - key2
    - key3

在 environment 中,将被处理为:

  • app.keys[0] 对应 key1
  • app.keys[1] 对应 key2
  • app.keys[2] 对应 key3

因此对于复杂配置需要特殊处理,例如获取集合元素需要使用类似数组索引的语法来访问 yaml 文件中的列表元素。

4. 使用 @propertysource 注解加载额外的配置文件

@propertysource 注解是 spring framework 提供的一个注解,用于加载额外 .properties 配置文件或其他资源文件中的属性到 spring 的 environment 中。

在 src/main/resources 目录下创建 config.properties 的属性文件:

app.name=myapp
app.version=1.0.0

在配置类上使用 @propertysource 注解来加载配置文件:

@configuration
@propertysource("classpath:config.properties")
//@propertysource({"classpath:config.properties", "classpath:another-config.properties"})
public class appconfig {
    
}

使用 @value 注解或 environment 对象获取属性:

import org.springframework.beans.factory.annotation.value;
import org.springframework.stereotype.component;

@component
public class mycomponent {

    @value("${app.name}")
    private string appname;

    @autowired
    private environment env;

    public void printappinfo() {
        system.out.println("app name: " + appname);
        string appversion = env.getproperty("app.version");
        system.out.println("app version: " + appversion);
    }
}

注意: 如果需要加载多个属性文件,可以在 @propertysource 注解中使用 value 属性指定多个文件路径:

@propertysource({"classpath:config.properties", "classpath:another-config.properties"})
  • 路径:classpath: 前缀表示文件在类路径中。如果文件位于文件系统的其他位置,你可以使用文件系统路径,例如 file:/path/to/config.properties。
  • 覆盖:@propertysource 加载的属性文件中的属性会覆盖同名的系统属性,但不会覆盖由 spring boot 的 application.properties 或 application.yml 文件中定义的属性。
  • 顺序:如果多个属性文件定义了同一个属性,后加载的文件中的属性值会覆盖先加载的文件中的值。

以上就是springboot读取配置文件的四种方式的详细内容,更多关于springboot读取配置文件的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com