springboot加载配置文件几种方式

一,springboot优势之一就是自动化配置

开发过程中springboot自动读取application.properties和application.yaml,我们可以利用这一点实现配置读取

二,say nothing without codes

1,@Value(),最常用的方式

application.yaml

arduino 复制代码
config: zhang

代码里使用如下:

kotlin 复制代码
    @Value("${config}")
    private String config;

    
    @PostMapping("/index")
    public void say() {
        System.out.println(config);
        
    }

输出

2,配置成实体

以上用法有个缺点,当某个配置有过多属性,比如邮件,有名称,密码,地址等属性,Value过多,代码过于丑陋,那么实体就是个很好的解决方式

yaml 复制代码
config2:
  name: demo1
  value: demoValue1
kotlin 复制代码
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "config2")
public class BeanConfig {
    public String name;
    public String value;

}
kotlin 复制代码
@RestController
public class Controller {

    @Autowired
    public BeanConfig config2;

    @PostMapping("/index")
    public void say() {
        
        System.out.println(config2);
        
    }
}

输出:BeanConfig(name=demo1, value=demoValue1)

3,进阶版,配置成Map

yaml 复制代码
config3:
  -id1:
    name: demo1
    value: demoValue1
  -id2:
    name: demo2
    value: demoValue2
typescript 复制代码
@Data
@Component
@ConfigurationProperties(prefix = "config3")
public class Config3 {

    private Map<String, String> id1 = new HashMap<>();
    private Map<String, String> id2 = new HashMap<>();

    public Map<String, String> getId1() {
        return id1;
    }

    public void setId1(Map<String, String> id1) {
        this.id1 = id1;
    }

    public Map<String, String> getId2() {
        return id2;
    }

    public void setId2(Map<String, String> id2) {
        this.id2 = id2;
    }
}

输出:Config3(id1={name=demo1, value=demoValue1}, id2={name=demo2, value=demoValue2})

三,总结

以上配置基本满足日常需求

如果第三种也是可以配置成动态的方式,配置List里新增配置项可以自动识别。

yaml 复制代码
config4:
  maillist:
    - enable: true
      name: demo1
      value: demoValue1
    - enable: true
      name: demo2
      value: demoValue2
    - enable: true
      name: demo3
      value: demoValue3
less 复制代码
@Data
@Component
@ConfigurationProperties(prefix = "config4")
public class Config4 {
    private List<MailBean> mailList;
}


@Data
public class MailBean {
    public String name;
    public String value;
}

输出:Config4(mailList=[MailBean(name=demo1, value=demoValue1), MailBean(name=demo2, value=demoValue2), MailBean(name=demo3, value=demoValue3)])

相关推荐
码事漫谈7 小时前
Protocol Buffers 编码原理深度解析
后端
码事漫谈7 小时前
gRPC源码剖析:高性能RPC的实现原理与工程实践
后端
踏浪无痕8 小时前
AI 时代架构师如何有效成长?
人工智能·后端·架构
程序员小假9 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
武子康10 小时前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
maozexijr10 小时前
Rabbit MQ中@Exchange(durable = “true“) 和 @Queue(durable = “true“) 有什么区别
开发语言·后端·ruby
源码获取_wx:Fegn089510 小时前
基于 vue智慧养老院系统
开发语言·前端·javascript·vue.js·spring boot·后端·课程设计
独断万古他化10 小时前
【Spring 核心: IoC&DI】从原理到注解使用、注入方式全攻略
java·后端·spring·java-ee
毕设源码_郑学姐10 小时前
计算机毕业设计springboot基于HTML5的酒店预订管理系统 基于Spring Boot框架的HTML5酒店预订管理平台设计与实现 HTML5与Spring Boot技术驱动的酒店预订管理系统开
spring boot·后端·课程设计
不吃香菜学java10 小时前
spring-依赖注入
java·spring boot·后端·spring·ssm