yaml配置注入

配置文件
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

application.properties

  语法结构 :key=value

application.yml

   语法结构 :key:空格 value

注入配置文件

yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!

yaml注入配置文件

1、在springboot项目中的resources目录下新建一个文件 application.yml

2、编写一个实体类 Dog;

@Component  //注册bean到容器中
public class Dog {
    private String name;
    private Integer age;
    
    //有参无参构造、get、set方法、toString()方法  
}

3、我们原来是如何给bean注入属性值的!@Value,给狗狗类测试一下:

@Component //注册bean
public class Dog {
    @Value("阿黄")
    private String name;
    @Value("18")
    private Integer age;
}

4、在SpringBoot的测试类下注入狗狗输出一下;


@SpringBootTest
class DemoApplicationTests {

    @Autowired //将狗狗自动注入进来
    Dog dog;

    @Test
    public void contextLoads() {
        System.out.println(dog); //打印看下狗狗对象
    }

}

结果成功输出,@Value注入成功
在这里插入图片描述
5、我们在编写一个复杂一点的实体类:Person 类

@Component //注册bean到容器中
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    
    //有参无参构造、get、set方法、toString()方法  
}

6、我们来使用yaml配置的方式进行注入


person:
  name: qinjiang
  age: 3
  happy: false
  birth: 2000/01/01
  maps: {k1: v1,k2: v2}
  lists:
   - code
   - girl
   - music
  dog:
    name: 旺财
    age: 1

7、我们刚才已经把person这个对象的所有值都写好了,我们现在来注入到我们的类中!
@ConfigurationProperties(prefix = “person”)

/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

8、IDEA 提示,springboot配置注解处理器没有找到,让我们看文档,我们可以查看文档,找到一个依赖!
在这里插入图片描述

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

9、确认以上配置都OK之后,我们去测试类中测试一下:


@SpringBootTest
class DemoApplicationTests {

    @Autowired
    Person person; //将person自动注入进来

    @Test
    public void contextLoads() {
        System.out.println(person); //打印person信息
    }

}

在这里插入图片描述

加载指定的配置文件

@PropertySource :加载指定的配置文件;
@configurationProperties:默认从全局配置文件中获取值;

1、在resources目录下新建一个person.properties文件

name=kuangshen

2、然后在我们的代码中指定加载person.properties文件
@PropertySource(value = “classpath:person.properties”)

@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {

    @Value("${name}")
    private String name;

    ......  
}

文章来自于 哔哩哔哩(遇见狂神说)
遇见狂神说

<think>我们正在讨论YAML配置文件中的列表类型配置。根据引用内容,YAML支持多种数据类型,包括列表(数组)。在YAML中,列表可以用两种方式表示: 1. 使用短横线(-)表示列表项,每个项单独一行,并缩进相同空格。 2. 使用方括号([])表示内联数组,项之间用逗号分隔。 引用[3]中提到了YAML配置列表的示例: ```yaml list1: - cat - dog - pig list2: [red, green, yellow] list3: beiJing,shangHai,guangZhou,shenZhen # 注意:这种方式在Spring Boot中可能被解析为字符串,需要特殊处理 ``` 引用[5]中也有一个路由列表的配置示例: ```yaml spring: cloud: gateway: routes: - id: gateway-service-1 uri: https://www.baidu.com predicates: - Path=/searchBaidu/** filters: - CacheRequestFilter - ValidateCodeFilter - StripPrefix=1 - /authmxl/uklogin - id: gateway-service-2 uri: https://www.google.com predicates: - Path=/searchGoogle/** filters: - CacheRequestFilter - ValidateCodeFilter - StripPrefix=1 - /authmxl/uklogin ``` 因此,在YAML配置list类型的数据,主要有两种方式: ### 1. 块序列(Block Sequence) 使用短横线(`-`)开头,后面跟一个空格,然后写值。每个列表项单独一行,并且缩进相同。 ```yaml fruits: - Apple - Banana - Orange ``` ### 2. 流序列(Flow Sequence) 使用方括号(`[]`)将多个项括起来,项之间用逗号分隔。这种方式在一行内表示列表。 ```yaml fruits: [Apple, Banana, Orange] ``` ### 注意: - 在Spring Boot中,使用`@Value`注解注入列表时,需要特别注意。引用[3]中提到,使用`@Value`注入列表可能会遇到问题,比如: ```java @Value("${yaml.list3}") private String[] list3; // 可以注入,因为这里是数组,但是yaml配置为逗号分隔的字符串 ``` 但是,对于多行列表(块序列)和内联数组(流序列),使用`@Value`可能无法直接注入到List或数组(除非是数组且配置为逗号分隔的字符串)。通常,推荐使用`@ConfigurationProperties`来绑定复杂类型,包括列表。 - 在引用[3]的例子中,`list1`和`list2`只能通过`@ConfigurationProperties`注入,而`list3`(逗号分隔的字符串)可以通过`@Value`注入为字符串数组。 ### 示例:在Spring Boot配置列表 假设我们有一个配置类: ```java @Configuration @ConfigurationProperties(prefix = "my") public class MyConfig { private List<String> list1; private List<String> list2; private String[] list3; // getters and setters } ``` 对应的YAML配置: ```yaml my: list1: - cat - dog - pig list2: [red, green, yellow] list3: beiJing,shangHai,guangZhou,shenZhen ``` 这样,Spring Boot会自动将YAML中的列表绑定到Java类的List或数组属性上。 ### 总结: 在YAML中定义列表,可以使用块序列(每项前加`-`)或流序列(用`[]`括起来)。在Spring Boot中,为了正确绑定列表类型,建议使用`@ConfigurationProperties`而不是`@Value`。 §§相关问题§§ 1. YAML配置文件中如何表示嵌套的列表? 2. 在Spring Boot中,如何将YAML中的列表注入Java对象的List属性? 3. YAML配置文件中的列表和Map(字典)有什么区别? 4. 在YAML中,如何配置一个包含复杂对象(如对象列表)的列表? 5. YAML的列表配置中,缩进规则有哪些注意事项?</think>### YAML 配置文件中 List 类型数据的定义与配置YAML 配置文件中定义和配置 list 类型的数据主要有两种方式,根据引用内容[^2][^3][^5]的示例: #### 方式 1:块序列(缩进+短横线) ```yaml # 引用[3]示例 list1: - cat - dog - pig # 引用[5]示例(嵌套列表) spring: cloud: gateway: routes: - id: gateway-service-1 # 第一项 uri: https://www.baidu.com predicates: - Path=/searchBaidu/** # 嵌套列表 - id: gateway-service-2 # 第二项 uri: https://www.google.com ``` **特点**: - 每个列表项以短横线 `-` 开头 - 所有项必须保持相同缩进(通常 2 空格) - 支持多级嵌套列表 - 适合复杂结构(如对象列表) #### 方式 2:流序列(方括号) ```yaml # 引用[3]示例 list2: [red, green, yellow] # 等效写法 colors: - [red, green, blue] # 嵌套列表 - [black, white] ``` **特点**: - 使用方括号 `[...]` 包裹 - 项之间用逗号分隔 - 适合简单数据或单行配置 - 支持嵌套(多维数组) --- ### ⚠️ 注意事项 1. **缩进规则**(引用[^4]): - 必须使用空格缩进(建议 2 空格) - 同一层级缩进必须一致 ```yaml correct: - item1 - item2 error: - item1 - item2 # 错误缩进 ``` 2. **Spring Boot 注入**(引用[^3]): - 块序列/流序列需通过 `@ConfigurationProperties` 注入 ```java @ConfigurationProperties(prefix = "my") public class MyConfig { private List<String> list1; // 自动绑定 } ``` - 逗号分隔字符串可用 `@Value` 注入数组 ```java @Value("${my.list3}") private String[] list3; // 需 yaml 配置: list3: A,B,C ``` 3. **复杂对象列表**(引用[^5]): ```yaml employees: - name: 张三 dept: 技术部 skills: [Java, Docker] - name: 李四 dept: 产品部 skills: [Axure, SQL] ``` --- ### 配置示例对比 | **类型** | **YAML 写法** | **Java 类型** | |----------------|----------------------------------------|----------------------------| | 简单列表 | `colors: [red, green]` | `List<String>` | | 多行列表 | ```<br>colors:<br> - red<br> - green``` | `List<String>` | | 对象列表 | 如上 `employees` 示例 | `List<Employee>` | | 嵌套列表 | `matrix: [[1,2], [3,4]]` | `List<List<Integer>>` | | 逗号分隔字符串 | `cities: beiJing,shangHai` | `String[]` (需 `@Value`) |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值