如何在spring boot中使用自己在yml配置的自定义参数

例如这样的配置:

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);
    }
}

其他注意事项

  1. 启用配置属性支持

    • 如果使用@ConfigurationProperties,确保主类或配置类上有@EnableConfigurationProperties
      @SpringBootApplication
      @EnableConfigurationProperties(SelfParaConfig.class)
      public class VideoFrameApplication {
          public static void main(String[] args) {
              SpringApplication.run(VideoFrameApplication.class, args);
          }
      }
      
  2. 配置元数据提示(可选)

    • pom.xml中添加依赖,以便IDE能识别自定义参数:
      <dependency>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-configuration-processorartifactId>
          <optional>trueoptional>
      dependency>
      
    • 重新编译后,IDE会提供参数名称的自动补全和文档提示。
  3. 属性未找到错误处理

    • 如果启动时报错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 需要批量绑定多个关联属性 结构化、类型安全、支持验证 需要编写配置类

选择适合你场景的方式即可。如果参数需要跨多个类使用,推荐使用方式二。

你可能感兴趣的:(spring,boot,java,后端)