栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot学习之路(三)——全局配置文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot学习之路(三)——全局配置文件

一、全局配置文件的介绍

全局配置文件能够对一些默认配置值进行修改,在SpringBoot中使用一个application.properties或者application.yaml作为全局配置文件,该文件一般存放到src/main/resource目录中,也可以存放到类路径的config中,一般选择resource存放

application.properties与application.yaml的区别:

1、加载优先级:application.properties配置文件的优先级要高于application.yaml的优先级,也就是说如果两个配置都有相同的配置项,则application.properties会覆盖application.yaml里的配置值

2、文件格式不同:application.yaml的层级关系更为直观,通过缩进式控制层级关系

例如,在application.properties文件中配置Tomcat的端口号为8083的写法是server.port=8083,而在application.yaml中的写法是

server:
  port: 8083
二、测试使用全局配置文件配置属性值

1、编写实体类Pet和Person

public class Pet {
    private String type;
    private String name;
    //省略属性getter和setter方法
    //省略toString方法
}
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
​
import java.util.Arrays;
import java.util.List;
import java.util.Map;
​
@Component//用于将Person类作为Bean注入Spring容器中
@ConfigurationProperties(prefix = "person")//将配置文件以person开头的属性注入该类中
public class Person {
    private Integer id;
    private String name;
    private List hobby;
    private String[] familly;
    private Map map;
    private Pet pet;
    //省略属性getter和setter方法
    //省略toString方法
}

2、在全局配置文件application.properties/application.yaml(二选一即可)中配置属性值

在编写配置文件时,由于Person对象是我们自定义的,所以SpringBoot无法识别给出书写提示,为了出现代码提示效果,在使用@ConfigurationProperties注解进行配置文件属性值注入时,可以在pom文件中添加一个配置处理器依赖


     org.springframework.boot 
     spring-boot-configuration-processor 
     true 
#properties格式
#对实体类对象Person进行属性设置
person.id=1
person.name=Tom
person.familly=father,mother
person.hobby=play,read
person.map.k1=k1Value
person.map.k2=k2Value
person.pet.name=kity
person.pet.type=cat
#yaml格式
person:
#  一、Value值为普通数据类型(如数字、字符串、布尔值等)key:(空格)value
  id: 1
  name: Tom
#  二、value值为数组或单列集合
#  行内式写法,[]可省略
  hobby: [play,read]
#  缩进式写法
#  缩进式第一种写法(-(空格)Value)
#  hobby:
#    - play
#    - read
#  缩进式第二种写法(直接赋值并使用英文逗号隔开属性值)
#  hobby:
#     play,
#     read
  familly: [father,mother]
#  三、value值为Map集合或者对象
#  map行内式写法,且{}不可省略,同时注意k1:(空格)k1Value以及map:(空格)中的空格不要漏掉,属性间用英文逗号隔开
# map: {k1: k1Value,k2: k2Value} 
# map缩进式写法
  map:
    k1: k1Value
    k2: k2Value
  pet: {type: cat, name: hellokitty}

yaml格式说明:

一、Value值为普通数据类型(如数字、字符串、布尔值等)key:(空格)value

name: (空格)Tom

二、value值为数组或单列集合

1、行内式写法,[]可省略

hobby:(空格) [play,read]

2、缩进式第一种写法(-(空格)Value)

hobby:

- (空格)play

- (空格)read

3、缩进式第二种写法(直接赋值并使用英文逗号隔开属性值)

hobby:

play,

read

三、value值为Map集合或者对象

1、map行内式写法,且{}不可省略,

同时注意k1:(空格)k1Value以及map:(空格)中的空格不要漏掉,属性间用英文逗号隔开

map: (空格){k1:(空格) k1Value,k2: (空格)k2Value}

2、map缩进式写法

map: k1:(空格)k1Value k2:(空格)k2Value

3、编写测试类

import com.chen.domain.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
​
@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo01ApplicationTest {
​
    @Autowired
    private Person person;
    
    @Test
    public void  test(){
        System.out.println(person);
    }
}

4、运行结果

三、配置文件的属性值注入

1、使用@ConfigurationProperties注解进行批量注入

上述案例就是使用@ConfigurationProperties注解进行批量注入。需要注意的是,使用该注解时,要保证配置文件中的属性与对应的实体类的属性名要一致,否则无法正确获取并注入属性,同时属性还要提供setter方法

2、使用@Value注解进行单个注入

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
​
@Component//用于将Person类作为Bean注入Spring容器中
public class Person {
//    @Value("${person.id}")
    @Value("#{5*2}")//使用SpEL表达式注入属性值
    private Integer id;
    @Value("${person.name}")
    private String name;
    private List hobby;
    private String[] familly;
    private Map map;
    private Pet pet;
    //省略属性getter和setter方法
    //省略toString方法
}

运行测试类

@ConfigurationProperties与@Value两种注解对比

@ConfigurationProperties@Value
框架SpringBoot自带的Spring自带的
功能批量注入配置文件中的属性值单个注入
setter方法需要提供不需要提供
复杂类型属性注入(如集合、对象、数组)支持不支持
松散绑定支持不支持
JSR303数据校验支持,在实体类的属性中引入校验类型即可不支持
SpEL表达式不支持支持

项目结构

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583139.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号