当前位置: 首页 > news >正文

springboot去读yml配置文件中的属性值

springboot去读yml配置文件中的属性值

  • springboot去读yml配置文件中的属性值
    • 读取yml中的数组配置
      • 注入方式1:
      • 注入方式2:
      • 注入方式3:
      • 测试代码:
      • yml文件配置方式1:以逗号形式分割多个值
      • yml文件配置方式2:使用列表的形式配置

springboot去读yml配置文件中的属性值

读取yml中的数组配置

注入方式1:

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

@Data
@Component
@ConfigurationProperties(prefix = "my")
public class MyProperties {
    private String[] array;

}

注入方式2:

【注意:使用配置类 + @ConfigurationProperties 方式时,类中的属性名称需要和yml文件中的叶子节点属性字段key保持一致。yml中的中划线会指定映射成 Bean 对象的 驼峰。例如:yml中 district-code,会自动映射到java类中的 districtCode 属性上】

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

import java.util.List;

@Data
@Component
@ConfigurationProperties(prefix = "my")
public class MyProperties2 {
    private List<String> array;
}

注入方式3:

在spring容器管理的类里使用@value注解注入yml中属性值

 @Value("#{'${my.array}'}") // 注意这里的单引号和花括号的使用
 private List<String> myArray;

或者

 @Value("${my.array}")
 private List<String> syncDataDistrictCodes;

以上两种没有默认值,如果yml中没有配置,程序启动时会报错:

Could not resolve placeholder 'my.array' in value "#{'${my.array}'}"

再或者(注意这里边带冒号,冒号后边指定默认值,如果只写了个冒号,没有指定默认值,List注入的是 空的列表,不是null)

 @Value("${my.array:}")
 private List<String> syncDataDistrictCodes;

测试代码:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("test")
public class TestController {

    @Value("#{'${my.array}'}") // 注意这里的单引号和花括号的使用
    private List<String> myArray;

    @Resource
    private MyProperties myProperties;
    @Resource
    private MyProperties2 myProperties2;

    @GetMapping("/getConfig")
    public Object getConfig() {
        Map<String, Object> resMap = new LinkedHashMap<>();
        resMap.put("@value注入", myArray);
        resMap.put("配置类注入myProperties-myArray", myProperties.getArray());
        resMap.put("配置类注入myProperties2-strList", myProperties2.getArray());
        return resMap;
    }
}

yml文件配置方式1:以逗号形式分割多个值

my:
  array: value1,value2,value3

请求测试接口输出结果:

{
    "@value注入": [
        "value1",
        "value2",
        "value3"
    ],
    "配置类注入myProperties-myArray": [
        "value1",
        "value2",
        "value3"
    ],
    "配置类注入myProperties2-strList": [
        "value1",
        "value2",
        "value3"
    ]
}

总结:三种注入方式均可正常注入

yml文件配置方式2:使用列表的形式配置

my:
  array:
    - value1
    - value2
    - value3

注入方式3的代码加上后,项目无法启动,报错:

Could not resolve placeholder 'my.array' in value "#{'${my.array}'}"

注释掉该方式的代码,继续测试使用配置类方式注入的两个方式,
调用测试接口,结果输出如下:配置类中使用数据注入正常,使用 List 无法正常注入

{
    "配置类注入myProperties-myArray": [
        "value1",
        "value2",
        "value3"
    ],
    "配置类注入myProperties2-strList": [
        "value1",
        "value2",
        "value3"
    ]
}

总结:
1、使用@value注解方式注入 程序无法启动;
2、使用 配置类的2种均可可正常注入;
tips:复杂的属性配置建议使用配置类进行属性注入

http://www.dtcms.com/a/108182.html

相关文章:

  • LLM大模型学习系列——总纲
  • 瑞数信息发布《BOTS自动化威胁报告》,揭示AI时代网络安全新挑战
  • 深入解析 Java 8 Function 接口:函数式编程的核心工具
  • react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析--react17
  • Windows下部署AgentGPT
  • C/C++与JavaScript的WebAssembly编程(一)
  • RNN模型及NLP应用(5/9)——多层RNN、双向RNN、预训练
  • js防抖函数防抖无效的解决方法
  • 14.网络套接字TCP
  • 5.好事多磨 -- TCP网络连接Ⅱ
  • LabVIEW多线程
  • API vs 网页抓取:获取数据的最佳方式
  • PyTorch中.pth文件的解析及应用
  • Linux的TCP连接数到达2万,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出现什么问题
  • Python `async` 和 `asyncio` 区别; `asyncio.Lock` 和 `threading.Lock`区别
  • pyqt SQL Server 数据库查询-优化2
  • 使用ChromaDB构建RAG知识库
  • SSH远程连接服务器(cursor)
  • ssh私钥文件登录问题:Load key invalid format
  • spring-ai-alibaba第四章阿里dashscope集成百度翻译tool
  • 端到端机器学习流水线(MLflow跟踪实验)
  • Vue3+Vite+TypeScript+Element Plus开发-04.静态菜单设计
  • Java单例模式详解
  • 深入理解 CSS 选择器:从基础到高级的样式控制
  • iPhone 16怎么录制屏幕内容?屏幕录制技巧、软件分享
  • eBest AI智能报表:用自然语言对话解锁企业数据生产力
  • PostgreSQL HAVING 子句详解
  • 最小二乘求解器lstsq,处理带权重和L2正则的线性回归
  • Vue3 + Element Plus + AntV X6 实现拖拽树组件
  • 【人工智能之大模型】如何缓解大语言模型LLMs重复读的问题?