例如这样的配置:
selfPara:
fastApiIP: 127.0.0.1
在Spring Boot中,可以通过以下两种方式读取application.yml中的自定义参数:
方式一:使用@Value注解直接注入
1. 确认YAML格式
确保参数层级缩进正确(使用2或4空格缩进):
selfPara:
fastApiIP: 127.0.0.1
2. 在代码中使用@Value注入
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component // 确保类被Spring管理
public class MyConfigComponent {
@Value("${selfPara.fastApiIP}") // 使用${}占位符语法
private String fastApiIP;
public void printConfig() {
System.out.println("FastAPI IP: " + fastApiIP);
}
}
方式二:使用@ConfigurationProperties批量绑定
1. 创建配置类
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "selfPara") // 绑定前缀为selfPara的属性
public class SelfParaConfig {
private String fastApiIP; // 字段名必须与yaml中的子属性名完全一致
// Getter和Setter必须存在
public String getFastApiIP() {
return fastApiIP;
}
public void setFastApiIP(String fastApiIP) {
this.fastApiIP = fastApiIP;
}
}
2. 在需要的地方注入使用
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private final SelfParaConfig selfParaConfig;
@Autowired // 通过构造器注入
public MyService(SelfParaConfig selfParaConfig) {
this.selfParaConfig = selfParaConfig;
}
public void connectToApi() {
String ip = selfParaConfig.getFastApiIP();
System.out.println("Connecting to API at: " + ip);
}
}
其他注意事项
-
启用配置属性支持:
- 如果使用
@ConfigurationProperties,确保主类或配置类上有@EnableConfigurationProperties:@SpringBootApplication @EnableConfigurationProperties(SelfParaConfig.class) public class VideoFrameApplication { public static void main(String[] args) { SpringApplication.run(VideoFrameApplication.class, args); } }
- 如果使用
-
配置元数据提示(可选):
- 在
pom.xml中添加依赖,以便IDE能识别自定义参数:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> - 重新编译后,IDE会提供参数名称的自动补全和文档提示。
- 在
-
属性未找到错误处理:
- 如果启动时报错
Could not resolve placeholder 'selfPara.fastApiIP',检查:- YAML缩进是否正确
- 属性名是否拼写错误
- 是否在正确的
application.yml文件中配置
- 如果启动时报错
示例:在Controller中使用
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
// 方式一:直接注入
@Value("${selfPara.fastApiIP}")
private String fastApiIP;
// 方式二:通过配置类注入
private final SelfParaConfig selfParaConfig;
@Autowired
public MyController(SelfParaConfig selfParaConfig) {
this.selfParaConfig = selfParaConfig;
}
@GetMapping("/ip")
public String getIp() {
// 两种方式均可使用
return "Direct Value: " + fastApiIP +
", Config Class: " + selfParaConfig.getFastApiIP();
}
}
总结
| 方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
@Value | 简单、少量属性的注入 | 快速直接 | 不适合多个关联属性 |
@ConfigurationProperties | 需要批量绑定多个关联属性 | 结构化、类型安全、支持验证 | 需要编写配置类 |
选择适合你场景的方式即可。如果参数需要跨多个类使用,推荐使用方式二。
1205

被折叠的 条评论
为什么被折叠?



