Home  >  Article  >  Java  >  How does springboot read lists, arrays, map collections and objects in yml files?

How does springboot read lists, arrays, map collections and objects in yml files?

PHPz
PHPzforward
2023-05-11 10:46:102545browse

application.yml defines the list collection

The first way is to use the @ConfigurationProperties annotation to get all the values ​​of the list collection

type:
  code:
    status:
      - 200
      - 300
      - 400
      - 500

Write the entity class corresponding to the configuration file, What needs to be noted here is that to define the list collection, first define a configuration class Bean, and then use the annotation @ConfigurationProperties annotation to obtain the list collection value. Here we will explain the role of the relevant annotations.

  • @Component Hands over the entity class to Spring management

  • @ConfigurationProperties(prefix = “type.code”) Read the yml file list

  • @Data automatically generates getter and setter methods

As shown in the figure below

package com.o2o.data;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "type.code") // 配置文件的前缀
@Data
public class TypeCodeConfig {
    private List<String> status;

    public void setStatus(List<String> status){
        this.status = status;
    }
    public List<String> getStatus(){
        return status;
    }
}

Then where to use For automatic injection, I read this list directly in the startup class. It should be noted that using the list configured in yml requires injecting the object first, and then reading the value in the configuration file through the get method.

  • @Autowired private TypeCodeConfig typeCodeConfig; Use annotations to inject objects

  • System.out.println(typeCodeConfig.getStatus()); Call getter Method to read the value

package com.o2o;

import com.o2o.data.TypeCodeConfig;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan("com.o2o.mapper")
public class AutoTestApplication implements CommandLineRunner {

	public static void main(String[] args) {
		SpringApplication.run(AutoTestApplication.class, args);
	}

	@Autowired
	private TypeCodeConfig typeCodeConfig;

	@Override
	public void run(String... args) throws Exception {
		System.out.println(typeCodeConfig.getStatus());

Start springboot We have successfully read all the values ​​of the list collection in the yml file from the console

How does springboot read lists, arrays, map collections and objects in yml files?

The second method uses the @value annotation to obtain all the values ​​​​of the list collection

The yml file is configured as follows

student:
  ids:
    - 7
    - 8
    - 9

Then create an entity class

@Data
public class Student {
    @Value("${student.ids}")
    private List<Integer> ids;

}

Create a new configuration class for the list attribute

@Component
@ConfigurationProperties(prefix = "student")
@Data
public class TypeCodeConfig {

private List<Integer> ids;

   public void setIds(List<Integer> ids) {
       this.ids = ids;
   }
      public  List<Integer> getIds(){
       return ids;
}

Inject in the startup class

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan("com.o2o.mapper")
public class AutoTestApplication implements CommandLineRunner {

	public static void main(String[] args) {
		SpringApplication.run(AutoTestApplication.class, args);
	}

	@Autowired
	private TypeCodeConfig typeCodeConfig;
	
	@Override
	public void run(String... args) throws Exception {

		System.out.println(typeCodeConfig.getIds());
	}

Start springboot and we have successfully read all the values ​​​​of the list collection in the yml file from the console

How does springboot read lists, arrays, map collections and objects in yml files?

application.yml defines the array type

yml configuration file is as shown below

dataSync: enable: true type: - "1" - "2" - "3"

Get the array value through @value annotation

@Value("${dataSync.enable.type}")
 private String[] type;

can also be obtained by creating a configuration class bean and using the @ConfigurationProperties annotation , as shown in the following figure:

@Data
@Component
@ConfigurationProperties(prefix = "dataSync.enable") // 配置 文件的前缀
public class InterceptorPathBean
{  
    private String[] type;
}

yml files can also store objects and collections of objects. The usage method is the same as The basic types are similar.
Simple example:

Define map collection configuration

interceptorconfig:
  path:
    maps:
      name: 小明
      age: 24

By creating a configuration class bean, use the @ConfigurationProperties annotation to obtain the map value, as shown in the figure below

@Data
@Component
@ConfigurationProperties(prefix = "interceptorconfig.path") // 配置 文件的前缀
public class InterceptorPathBean
{
    private Map<String , String> maps;
}

Use objects Configuration

student:
  id: 1
  name: Bruce
  gender: male

Use object collection configuration

students: 
  - id: 1
    name: Bruce
    gender: male
  - id: 2
    name: ...
    ...

Here I will summarize some important points for you:

1. In the list type yml configuration file, you need to use "- " to form a collection of lists.

2. There is no level limit for the prefix in yml. If it is multi-level, such as demo/code here, the prefix for configuring the ConfigurationProperties annotation in the java class is written as "demo.code"

3. The attribute name supports the hyphen "-" in the yml file, such as four-span. When configuring the attribute in the java class, it needs to be converted to camel case, fourSpan.

4. Java class attributes need to be configured with set and get methods.

The above is the detailed content of How does springboot read lists, arrays, map collections and objects in yml files?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete