SoFunction
Updated on 2025-04-28

Detailed tutorial on injecting Map and List via @Value and configuring with YAML in SpringBoot

introduction

In SpringBoot development, we often need to read various parameters from configuration files. For simple strings or values, just use the @Value annotation. But how do we operate when we need to inject more complex data structures, such as Map or List? Especially when using YAML, a more user-friendly configuration file format, how should we configure it correctly? Today we will completely solve this problem!

1. Basic review: Basic usage of @Value

First, let's take a quick look at it@ValueBasic usage of annotations. In Spring, we can inject a simple value like this:

@Value("${}")
private int serverPort;

Corresponding file content:

=8080

If it is YAML format(), it is:

server:
  port: 8080

2. Inject List collection

2.1 Configuring List using properties format

Suppose we need to inject a list of strings, which can be written in the .properties file:

=feature1,feature2,feature3

Then in the Java code:

@Value("${}")
private List<String> features;

2.2 Configuring List with YAML format (a more elegant way)

YAML format is more intuitive when dealing with collection types:

app:
  features:
    - feature1
    - feature2
    - feature3

The corresponding Java code remains unchanged:

@Value("${}")
private List<String> features;

3. Inject Map collection

3.1 Configuring Map using properties format

Configuring Map in .properties is a little more complicated:

.key1=value1
.key2=value2

Java code requires SPEL expressions:

@Value("#{${}}")
private Map<String, String> mappings;

3.2 Configuring Map using YAML format (recommended method)

YAML format processing Map is clearer:

app:
  mappings:
    key1: value1
    key2: value2

Java code also uses SPEL expressions:

@Value("#{${}}")
private Map<String, String> mappings;

4. Complex data structure injection

Sometimes we need to inject more complex structures, such as the Map in List:

YAML configuration:

app:
  complexData:
    - name: item1
      value: 100
    - name: item2
      value: 200

Java code:

@Value("#{${}}")
private List<Map<String, Object>> complexData;

5. Frequently Asked Questions and Solutions

5.1 Injection failure problem

If the injection fails, you can:

  • Check if the YAML format is indented correctly
  • Make sure the attribute names exactly match
  • Check if necessary dependencies are missing

5.2 Default value settings

You can set default values ​​for injected values:

@Value("${:default1,default2}")
private List<String> features;

5.3 Type conversion problem

Spring automatically performs basic type conversion, but may require a custom converter when encountering complex types.

6. Best Practice Recommendations

  1. For complex configurations, use YAML format is preferred
  2. Important configuration items should be added with comments
  3. Consider using @ConfigurationProperties for type-safe configuration
  4. Set reasonable default values ​​for critical configurations

7. Performance considerations

Although @Value is easy to use, in scenarios where frequent configuration reading is required, it is recommended:

  • Cache configuration values ​​into member variables
  • For unchanged configurations, use final modification
  • Consider using the lazy loading feature of @ConfigurationProperties

8. Summary

Through this article we have learned:

  • Basic method of injecting List and Map using @Value
  • Configuration differences between YAML and properties formats
  • Tips for handling complex data structures
  • Solutions to FAQs

Remember that in SpringBoot, the YAML format is usually more suitable for configuring complex data structures, which is clearer and easier to read. Although the @Value annotation is simple, it needs to be used with SPEL expressions when dealing with complex types.

The above is the detailed tutorial on injecting Map and List through @Value and using YAML configuration in SpringBoot. For more information about SpringBoot @Value injection Map and List, please follow my other related articles!