springboot配置yml与对应的java config

本文详细介绍了在SpringBoot中如何使用JavaConfig读取YAML配置文件,包括配置类注解的使用,如@ConfigurationProperties指定前缀,处理普通键值对、列表、数组和map等数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java config配置注意项

在springboot中读取yml的配置并封装成配置类需要如下几个注解

@ConfigurationProperties(prefix = “person”)表示读取前缀为person的配置,其中prefix可以是用.分割的多个层级

@ConfigurationProperties prefix默认为"",建议指定前缀,避免属性名称冲突,且指定前缀yml与java config对应更清晰

@Configuration表示这是一个配置类用于在springboot启动时扫描并加载

为了不用在每个config上都加一个@Configuration注解,可以在启动类中添加@ConfigurationPropertiesScan(basePackages = {“com.test.svc.config”})
com.test.svc.config包下存放全部java config类

1.普通key:value键值对

person:
  id: 1
  name: xiaohong
  sex: female
  age: 15

java config

@Configuration
@ConfigurationProperties(prefix = "person")
@Data
public class MyConfig {
    private Integer id;

    private String name;

    private String sex;

    private Integer age;
}

2.列表

yml中定义的列表,在java中可以用集合或数组识别

列表中每个元素都以-开头

2.1对象列表

yml

person:
  list:
    - id: 1
      name: xiaohong
      sex: female
      age: 15

    - id: 2
      name: xiaoming
      sex: male
      age: 20

java config

@Configuration
@ConfigurationProperties(prefix = "person")
@Data
public class MyConfig {
    private List<Person> list; //这个list对应yml中的list
    
    // private Person[] list; yml中配置的列表在java中也可以用数组识别

    @Data
    public static class Person{
        private Integer id;

        private String name;

        private String sex;

        private Integer age;
    }
}
2.2字符串列表

字符串中如果有:必须用引号引起来,否则会被识别为键值对

yml

person:
  strList:
    - "aa:bb"
    - bb
    - cc

java config

@Configuration
@ConfigurationProperties(prefix = "person")
@Data
public class MyConfig {
    private List<String> strList;
    
    //private String[] strList; 也可以识别成数组
}

3.数组

yml中的数组用>表示,数组的每个元素之间用,分割

字符串中含有:时不需要用引号

不可以表示对象数组

yml

person:
  arr: >
    aaa:bbb,
    bbb,
    ccc

java config

@Configuration
@ConfigurationProperties(prefix = "person")
@Data
public class MyConfig {
    
    private String[] arr;
    
}

4.map集合

4.1value为对象的map集合

yml

person:
  map:
    1:
      id: 1
      name: xiaohong
      sex: female
      age: 15

    2:
      id: 2
      name: xiaoming
      sex: male
      age: 20

java config

@Configuration
@ConfigurationProperties(prefix = "person")
@Data
public class MyConfig {

    private Map<Integer, Person> map;

    @Data
    public static class Person{
        private Integer id;

        private String name;

        private String sex;

        private Integer age;
    }
}
4.2value为基本数据类型

yml

person:
  map:
    1: xiaohong
    2: xiaoming

java config

@Configuration
@ConfigurationProperties(prefix = "person")
@Data
public class MyConfig {

    private Map<Integer, String> map;

}

5.没有prefix的用法

yml

list:
  - id: 1
    name: xiaohong
    sex: male
    age: 15

  - id: 2
  - name: xiaoming
    sex: female
    age: 20

java config

@Configuration
@ConfigurationProperties()
@Data
public class MyConfig {

    private List<Person> list;

    @Data
    public static class Person{
        private Integer id;

        private String name;

        private String sex;

        private Integer age;
    }
}
<think>好的,我现在需要帮助用户了解如何在Spring Boot中正确配置YAML文件,包括示例和最佳实践。首先,我要回顾用户提供的系统级指令,确保回答符合格式要求,比如使用正确的中文、LaTeX格式,以及生成相关问题。 用户提到了两个引用,都是关于Spring Boot配置文件的,特别是application.yml和多环境配置。我需要结合这些引用内容,但注意用户提供的引用内容可能不完整,所以可能需要依靠自己的知识来补充。 首先,我应该介绍YAML的基本结构,因为正确理解语法是配置的基础。例如,缩进和键值对的写法,以及如何避免常见错误。然后,可能需要分点讲解不同配置项,比如数据源、服务器端口、日志等,每个部分给出示例代码块,符合用户提供的Python示例格式,但这里需要是YAML。 接下来,多环境配置是用户特别提到的,引用[2]中提到了三种方法,所以需要详细说明这三种方法:使用不同文件名、spring.profiles.active、以及多文档块。每个方法给出示例,并说明适用场景。 最佳实践部分需要包括结构优化、安全配置配置校验和版本控制等内容,这些都是开发中常见的注意事项。例如,如何分组配置,使用@ConfigurationProperties注解,以及敏感信息的处理。 最后,生成的相关问题需要围绕用户可能的后续疑问,比如如何覆盖配置配置加密、properties文件的区别,以及配置加载顺序等。 需要确保所有技术术语准确,示例代码正确,并且引用标记正确添加。同时,避免使用用户不可见的格式,保持回答自然流畅,结构清晰,分点说明。</think>### Spring Boot YAML 文件配置详解 #### 一、YAML 基础语法 YAML(YAML Ain't Markup Language)采用缩进结构表示层级关系,键值对用冒号分隔。例如: ```yaml server: port: 8080 servlet: context-path: /api ``` #### 二、核心配置示例 1. **数据源配置** ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/mydb?useSSL=false username: root password: securePass123! driver-class-name: com.mysql.cj.jdbc.Driver hikari: maximum-pool-size: 10 ``` 2. **日志配置** ```yaml logging: level: root: INFO org.springframework.web: DEBUG file: name: logs/app.log max-size: 10MB ``` 3. **Swagger 文档配置** ```yaml springdoc: swagger-ui: path: /swagger-ui.html operationsSorter: alpha api-docs: path: /v3/api-docs ``` #### 三、多环境配置最佳实践(引用[2]) 1. **Profile 分离文件法** - `application-dev.yml` (开发环境) - `application-prod.yml` (生产环境) ```yaml # application.yml spring: profiles: active: @activatedProperties@ ``` 2. **单文件多文档块配置** ```yaml --- spring: config: activate: on-profile: dev server: port: 8080 --- spring: config: activate: on-profile: prod server: port: 80 ``` #### 四、高级配置技巧 1. **类型安全配置** ```java @ConfigurationProperties(prefix = "app.notification") public class NotificationConfig { private String endpoint; private int retryCount; // getters/setters } ``` 对应 YAML: ```yaml app: notification: endpoint: https://api.push.com/v2 retry-count: 3 ``` 2. **配置校验** ```yaml spring: mail: host: smtp.example.com port: 587 username: ${EMAIL_USER:default_user} password: ${EMAIL_PWD:} ``` #### 五、安全最佳实践 1. **敏感信息加密** ```yaml datasource: password: '{cipher}AQICAHh5pXv7w3...' ``` 2. **配置优先级管理** Spring Boot 配置加载顺序为: 1. 命令行参数 2. JNDI 属性 3. JVM 系统属性 4. 外部配置文件(按优先级排序)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值