SpringBoot 实体类绑定配置文件

在 Spring Boot 中,你可以使用 @ConfigurationProperties 注解将 YAML 配置文件中的属性绑定到实体类上。以下是一个简单的示例,展示了如何将 YAML 配置文件中的属性绑定到一个实体类上。

1. 创建 YAML 配置文件

首先,在 application.yml 文件中定义一些属性:

app:
  name: My Application
  description: This is a sample application
  server:
    ip: 192.168.1.1
    port: 8080
  users:
    - name: Alice
      age: 25
    - name: Bob
      age: 30

2. 创建实体类

接下来,创建一个实体类来映射这些属性。使用 @ConfigurationProperties 注解来指定前缀,并使用 @Component 注解将其注册为 Spring 的 Bean。

package com.example.demo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {

    private String name;
    private String description;
    private Server server;
    private List<User> users;

    // Getters and Setters

    public static class Server {
        private String ip;
        private int port;

        // Getters and Setters
    }

    public static class User {
        private String name;
        private int age;

        // Getters and Setters
    }

    // Getters and Setters for AppConfig
}

3. 启用配置属性绑定

在 Spring Boot 应用中,你需要确保配置属性绑定是启用的。通常,这可以通过在启动类上添加 @EnableConfigurationProperties 注解来实现(如果配置类上使用了 @Component,就不需要 @EnableConfigurationProperties 了)。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

@SpringBootApplication
// @EnableConfigurationProperties(AppConfig.class)
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

4. 使用配置属性

现在,你可以在其他 Spring 组件中注入 AppConfig 并使用它。

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    private final AppConfig appConfig;

    @Autowired
    public MyService(AppConfig appConfig) {
        this.appConfig = appConfig;
    }

    public void printConfig() {
        System.out.println("App Name: " + appConfig.getName());
        System.out.println("App Description: " + appConfig.getDescription());
        System.out.println("Server IP: " + appConfig.getServer().getIp());
        System.out.println("Server Port: " + appConfig.getServer().getPort());

        for (AppConfig.User user : appConfig.getUsers()) {
            System.out.println("User: " + user.getName() + ", Age: " + user.getAge());
        }
    }
}

5. 绑定指定的配置文件

5.1 创建配置文件

和 application.yml 同级目录下创建 application-myself.yml

person: 
    id: 1
    name: Milk
    bobby: [吃饭, 睡觉, 打豆豆]
    family: [father, mother]
    map: {k1: v1, k2:v2}
    pet: {type: dog, name: 旺财} # 会根据 Pet 类自动映射

5.2 java 实体类

// classpath: 表示当前工程 resource 目录(application.yml 的默认目录)
// classpath*: 当前工程和所有 jar 的 resource 目录(读取 jar 里面的配置文件)
// classpath:conf/db.properties:resource 的下级 conf 目录
@ConfigurationProperties(prefix = "person") // 注解表示要映射属性,并指定前缀
@PropertySource("classpath:application-myself.yml")
public class Person {
    // 匹配 person.id
    private int id; 
    private String name; 
    // 匹配 person.hobby
    private List<String> hobby; 
    private String[] family; 
    private Map map;
    private Pet pet; // 需要创建一个 Pet 类
}

5.3 启动配置

@EnableConfigurationProperties(Person.class) // 开启对应配置类(写在哪都可以)
@SpringBootApplication
public class App{

    public static void main(String[] args){
        SpringApplication.run(App.class, args)
    }
}

总结

  1. @PropertySource 来读取指定的配置文件
  2. @ConfigurationPropertiesprefix 属性来指定公共的配置项前缀
  3. @EnableConfigurationProperties 开启实体类绑定配置项
    1. 写在哪里都行,启动类比较常见
    2. 如果配置类使用 @Conponent@EnableConfigurationProperties 就不需要了
  4. yml语法
posted @   CyrusHuang  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示