0


springboot读取yml文件中的list列表、数组、map集合和对象方法实例

目录前言application.yml定义list集合application.yml定义数组类型总结
前言 springboot配置文件yml类型简单的风格,十分受大家的欢迎,支持字符string类型,支持列表list类型,支持集合map类型,支持数组array类型,支持类对象类型,下面我们来实战下这些形式的配置如何取值

application.yml定义list集合 第一种方式使用

@ConfigurationProperties

注解获取list集合的所有值

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

编写配置文件对应的实体类,这里需要注意的是,定义list集合,先定义一个配置类

Bean

,然后使用注解

@ConfigurationProperties

注解来获取list集合值,这里给大家讲解下相关注解的作用
@Component 将实体类交给Spring管理@ConfigurationProperties(prefix = “type.code”) 读取yml文件中的list@Data 自动生成getter和setter方法 如下图所示

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;
    
}
}

然后在要使用的地方自动注入,我是直接在启动类中读取这个list,需要注意,使用yml中配置的list需要先将对象注入,然后通过get方法读取配置文件中的的值。
@Autowired private TypeCodeConfig typeCodeConfig; 使用注解将对象注入System.out.println(typeCodeConfig.getStatus()); 调用getter方法读取值

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());

启动springboot我们已经从控制台成功读取到yml文件中list集合的所有值了

第二种方式使用

@value

注解获取list集合的所有值
yml文件配置如下

student:
  
ids:
    
- 7
    
- 8
    
- 9

然后创建一个实体类

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

再新建一个对list属性的配置类

@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;
}

在启动类中注入

@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());
    
}

启动springboot我们已经从控制台成功读取到yml文件中list集合的所有值了

application.yml定义数组类型 yml配置文件如下图所示

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

通过@value注解获取数组值

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

也可以通过创建配置类bean,使用

@ConfigurationProperties注解

获取,如下图所示:

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

yml文件还可以存放对象和对象的集合,使用方法与基本类型类似。
简单举例:
定义map集合配置

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

通过创建配置类bean,使用@ConfigurationProperties注解获取map值,如下图所示

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

使用对象配置

student:
  
id: 1
  
name: Bruce
  
gender: male

使用对象集合配置

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

最后传递List里面包裹Map

wx:
  mp:
    report:
      - map1:
          templateCode: acticityReport
          thing1: C语言程序设计
          thing17: 升级公开课
          date13: 2019-01-12 16:00
          thing20: 课程简介
          thing9: 请务必带好课程教材
      - map2:
          templateCode: examine
          thing1: 创想家比赛
          thing2: 小学高年级组
          thing3: 张三
          thing5: 您已成功报名
          thing6: 选拔赛

配置类

@Data
@Component
@ConfigurationProperties(prefix = "wx.mp")
public class WxReportProperties {
    private List<Map<String,Object>> report;
}

调用

@Autowired
private WxReportProperties wxReportProperties;
List<Map<String,Object>> configs =  wxReportProperties.getReport();

这里我给大家总结一些需要重要的点:
1、list类型的yml配置文件中,需要使用"-"来组成一个列表集合。
2、yml中的前缀没有层级限制,如果是多层级,比如这里的demo/code,在java类中配置ConfigurationProperties注解的prefix就写作"demo.code"
3、属性名称在yml文件中支持连字符"-",比如four-span,在java类中配置属性就需要转为驼峰式,fourSpan。
4、java类属性需要配置set,get方法。

标签: spring boot list spring

本文转载自: https://blog.csdn.net/loliDapao/article/details/130186349
版权归原作者 loliDapao 所有, 如有侵权,请联系我们删除。

“springboot读取yml文件中的list列表、数组、map集合和对象方法实例”的评论:

还没有评论