springboot项目+yml配置文件中的list示例

    springboot配置文件可以是properties,也可以是yml类型,它们都支持字符型,也支持列表list类型,假定在yml配置文件中支持列表类型格式如下:

    application.yml

demo:
  type:
    code:
      - 200
      - 201
      - 300
      - 400
      - 501

    编写对应的java类

package com.xxx.mongodemo.config;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "demo.type")
public class TypeCodeConfig {
	private List<String> code;
	
	public void setCode(List<String> code) {
		this.code = code;
	}
	
	public List<String> getCode() {
		return code;
	}
}

    在其他地方使用:

package com.xxx.mongodemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.xxx.mongodemo.config.TypeCodeConfig;

@SpringBootApplication
public class App implements CommandLineRunner{
    public static void main( String[] args ){
    	SpringApplication.run(App.class, args);
    }

    @Autowired
    private TypeCodeConfig config ;
    
	@Override
	public void run(String... args) throws Exception {
		System.out.println(config.getCode());
	}
}

    这里直接在启动类中读取这个list,这里需要注意,使用yml中配置的list需要先将对象注入,然后通过get方法读取它的值。

    打印信息如下所示,正确读取了list的值:

2021-04-14 14:17:41.292  INFO 16140 --- [           main] com.xxx.mongodemo.App                    : Started App in 2.059 seconds (JVM running for 2.396)
[200, 201, 300, 400, 501]

    有的地方直接通过数组(String[])去接收,而不是使用的是List<String>,看个人的需要,直接使用List其实是可以的,而且后续遍历和取值也很方便。 

    这里总结一些特别的地方:

    1、list类型的yml配置文件中,需要使用"-"来组成一个列表集合。

    2、yml中的前缀没有层级限制,如果是多层级,比如这里的demo/code,在java类中配置ConfigurationProperties注解的prefix就写作"demo.code"

    3、属性名称在yml文件中支持连字符"-",比如four-span,在java类中配置属性就需要转为驼峰式,fourSpan。

    4、java类属性需要配置set,get方法。

 

 

<think> 我们正在讨论Spring Boot配置文件中如何配置List类型的数据。根据引用内容,我们可以总结出在YAML和Properties两种配置文件中配置List的方法。 引用[1]提到了YAML和Properties配置文件读取List数据的方法。 引用[2]展示了Properties文件中配置List示例:使用索引([0], [1])来标识列表中的元素。 引用[3]展示了Properties文件中另一种配置List的方式,以及如何在Java类中使用@ConfigurationProperties来绑定配置。 因此,我们可以从两种配置文件格式(properties和yml)分别说明,并给出绑定到Java对象的示例。 注意:在YAML中,我们可以直接使用列表的语法,而在properties文件中,我们需要使用索引的方式。 具体步骤: 1. 在配置文件中配置List(分别展示properties和yml的写法) 2. 在Java类中通过@ConfigurationProperties绑定配置 另外,我们还可以使用@Value注解,但通常更推荐使用@ConfigurationProperties,因为它支持更复杂的结构并且类型安全。 下面开始组织回答: </think> ### Spring Boot配置文件List类型配置详解 在Spring Boot中,通过**YAML**或**Properties**格式配置List类型数据时,需注意语法差异和绑定方式。以下通过对比两种格式,结合代码示例详细说明: --- #### 一、Properties配置文件实现List **语法规则**: 使用`属性名[index]=值`格式,索引从0开始连续编号(不允许跳跃)[^2][^3] ```properties # 示例:热搜关键词列表配置 hotwords.lists[0].word=jack hotwords.lists[0].weight=12 hotwords.lists[1].word=tom hotwords.lists[1].weight=10 # 简单字符串列表 test-demo.test[0]=01 test-demo.test[1]=02 test-demo.test[2]=03 ``` **Java绑定类**: 使用`@ConfigurationProperties`绑定到List或嵌套对象集合 ```java @Data @Component @ConfigurationProperties(prefix = "hotwords") // 前缀匹配 public class HotWordsConfig { private List<Keyword> lists; // 自动映射到对象列表 @Data public static class Keyword { private String word; private int weight; } } // 简单List绑定 @ConfigurationProperties(prefix = "test-demo") public class MaskCipherConfig { private List<String> test; // 自动注入["01","02","03"] } ``` --- #### 二、YAML配置文件实现List **语法规则**: 使用缩进和`-`符号表示列表元素,支持多级嵌套[^1] ```yaml hotwords: lists: - word: jack weight: 12 - word: tom weight: 10 test-demo: test: - "01" - "02" - "03" ``` **Java绑定类**: 与Properties配置使用相同的绑定类,无需修改即可兼容 ```java // 与Properties相同的类即可自动解析YAML @ConfigurationProperties(prefix = "hotwords") public class HotWordsConfig { ... } ``` --- #### 三、关键注意事项 1. **索引连续性要求** Properties配置中索引必须连续(如`[0]`、`[1]`),跳跃会导致后续元素丢失[^3]。 2. **类型安全推荐** 优先使用`@ConfigurationProperties`而非`@Value`,因其支持: - 复杂嵌套结构 - 类型校验(如List元素自动转换Integer/String) - IDE提示(需添加`spring-boot-configuration-processor`依赖) 3. **默认值设置** 可在字段声明时设置默认空列表: ```java private List<String> test = new ArrayList<>(); ``` 4. **YAML优势** - 无需重复写属性前缀 - 支持多行字符串 - 结构可视化更清晰[^1] --- #### 四、@Value注解的替代方案(不推荐) 适用于简单List,但缺乏类型校验和嵌套支持: ```java @Value("${test-demo.test}") private List<String> test; // 需配置为逗号分隔: test-demo.test=01,02,03 ``` > **生产建议**:复杂场景务必采用`@ConfigurationProperties`+YAML组合,提升可维护性[^1]。 --- ### 配置效果验证 在Spring Boot启动类中添加测试: ```java @SpringBootApplication @EnableConfigurationProperties({HotWordsConfig.class, MaskCipherConfig.class}) public class App implements CommandLineRunner { @Autowired private HotWordsConfig hotWordsConfig; @Override public void run(String... args) { System.out.println("热搜关键词: " + hotWordsConfig.getLists()); // 输出: [Keyword(word=jack, weight=12), Keyword(word=tom, weight=10)] } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值