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)
}
}
总结
@PropertySource
来读取指定的配置文件@ConfigurationProperties
的prefix
属性来指定公共的配置项前缀@EnableConfigurationProperties
开启实体类绑定配置项- 写在哪里都行,启动类比较常见
- 如果配置类使用
@Conponent
,@EnableConfigurationProperties
就不需要了
- yml语法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具