前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot中的yml文件中读取自定义配置信息

SpringBoot中的yml文件中读取自定义配置信息

原创
作者头像
忆遂愿
发布2024-08-08 15:16:43
1540
发布2024-08-08 15:16:43

SpringBoot中的yml文件中读取自定义配置信息

开发中遇到的问题,百度的答案我都没有找到,去找大佬获取到的经验总结,这只是其中的一种方法,如果其他大佬有新的方法,可以分享分享。

一、非静态属性

1.1 yml文件

自定义配置信息,通过我们编写的代码读取。

代码语言:yml
复制
image:
    path: E:\image  #存储文件的磁盘目录
    server: http://localhost:8082/image/ #文件访问基础路径

1.2 类

非静态属性中@Value生效

ps: 不是在控制层中拥有@Controller注解,说明没有把该类放进IOC容器中,启动类时会找不到@Value,在其他类中可以用@Component注解,将该类注册到IOC容器中,使得程序运行时,能够找得到。

代码语言:java
复制
@Value("${image.path}")
private String path;  // path = E:\image
//从配置文件中读取公共配置信息
@Value("${image.server}")
private String server;

二、 静态属性

2.1 yml文件

代码语言:yml
复制
# 自定义二维码配置信息
qrcode:
  width: 600 # 二维码宽度
  height: 600 # 二维码高度

2.2 类

静态属性中@Value不生效

ps:使用@ConfigurationProperties注解来获取application.yml配置文件中的第一个属性名,接着只需要属性名和二级属性相同即可获取到。

代码语言:java
复制
// 想要在工具类的静态属性获取到application.yml配置文件内容的配置信息
// 1. 先加上注解
@Component // 注册到IOC容器
@ConfigurationProperties(prefix = "qrcode") // 获取到配置文件的属性
public class QRcodeUtil {
// 通过读取application.yml配置文件内容中的配置信息
//    @Value("${qrcode.width}")  // 再静态属性中@Value不生效
private static int width; //图形宽
 //    @Value("${qrcode.height}")
private static int height; //图形高
 
    // 3. 需要给属性值手动设置set方法
public void setWidth(int width) {
   QRcodeUtil.width = width;
}

public void setHeight(int height) {
   QRcodeUtil.height = height;
}

三、案例

在Spring Boot中,可以使用 .yml 文件(或 .yaml 文件)来存储自定义配置信息。.yml 文件是一种用于配置文件的格式,它使用缩进来表示数据层级关系,相比传统的 .properties 文件更加清晰易读。

示例 .yml 文件:

代码语言:java
复制
myapp:
  name: MyApp
  version: 1.0.0
  database:
    url: jdbc:mysql://localhost:3306/mydb
    username: myuser
    password: mypassword

在Spring Boot中,可以通过 @ConfigurationProperties 注解来读取 .yml 文件中的自定义配置信息。首先,需要创建一个对应配置的Java类,并使用 @ConfigurationProperties 注解指定前缀,以便将配置绑定到该类的属性上。

MyAppConfig 类来读取配置:

代码语言:java
复制
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfig {
    private String name;
    private String version;
    private DatabaseConfig database;

    // Getters and setters
    // 注意:在实际应用中,最好为每个属性提供getter和setter方法

    public static class DatabaseConfig {
        private String url;
        private String username;
        private String password;

        // Getters and setters
        // 注意:在实际应用中,最好为每个属性提供getter和setter方法
    }
}

在其他组件中注入 MyAppConfig 类,以便访问配置信息:

代码语言:java
复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class SomeComponent {

    private final MyAppConfig myAppConfig;

    @Autowired
    public SomeComponent(MyAppConfig myAppConfig) {
        this.myAppConfig = myAppConfig;
    }

    public void printConfig() {
        System.out.println("App Name: " + myAppConfig.getName());
        System.out.println("App Version: " + myAppConfig.getVersion());
        System.out.println("Database URL: " + myAppConfig.getDatabase().getUrl());
        System.out.println("Database Username: " + myAppConfig.getDatabase().getUsername());
        System.out.println("Database Password: " + myAppConfig.getDatabase().getPassword());
    }
}

这样,MyAppConfig 类的属性将会自动与 .yml 文件中的配置进行绑定,你就可以在应用中使用 MyAppConfig 类来访问配置信息了。

记录每一个学习瞬间

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot中的yml文件中读取自定义配置信息
    • 一、非静态属性
      • 二、 静态属性
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档