SpringBoot-配置文件

SpringBoot使用一个全局的配置文件,Spring允许两种类型的配置文件

  • application.properties
  • application.yml
    配置文件的作用,修改springboot自动配置的默认值。

yml语法格式

SpringBoot中推荐使用properties或Yaml来进行配置,对于较复杂的配置结构,yaml优于properties

基本语法
  • 使用缩进表示层级关系
  • 缩进时不允许使用tab键,只允许使用空格
  • 缩进的空格数目不重要,但是同级的元素缩进空格必须相同
  • 大小写敏感
支持的数据结构
  • 对象:键值对的集合
    在表示对象的时候由两种写法多行或者一行行
person:
    name: csdn
    age: 10
person: {name: csdn,age: 10}

注意k: v冒号和v之间一定要一个空格

  • 数组(list,set):一组按次序排列的值
    数组用- 值表示数组的一个元素
numbers:
    - one
    - two
    - three
    - four

行内写法

numbers: [one,two,three,four]
  • 字面量(数字、字符串、布尔之类的):单个的、不可再分的值
    字符串默认不用加上单引号或者双引号
    “”:双引号不会转义字符串里面的特殊字符 name: “666\n666” 结果就是666换行666
    ‘’:单引号会对内容进行转义 /n输出就是/n
实例

languages:
 - Ruby
 - Perl
 - Python 
websites:
 YAML: yaml.org 
 Ruby: ruby-lang.org 
 Python: python.org 
 Perl: use.perl.org 

使用配置文件配置类

创建一个值bean
package com.example.demo.bean;

import java.util.List;
import java.util.Map;
/**
 还有一种方式就是使用@Value进行属性值的注入
**/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private boolean gender;
    private Map<String,Object> map;
    private List<Object> list;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", map=" + map +
                ", list=" + list +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public boolean isGender() {
        return gender;
    }

    public void setGender(boolean gender) {
        this.gender = gender;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public List<Object> getList() {
        return list;
    }

    public void setList(List<Object> list) {
        this.list = list;
    }
}

这里引入了 @Component @ConfigurationProperties两个注解
@Component 作用:表明这个类需要被组件扫描器扫描到并实例化对象到IOC容器,简单的说就是将注解的类丢给容器
@ConfigurationProperties 作用:将配置文件中配置的每一个属性的值映射到组件中,告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定。其中prefix用于指定绑定配置文件中那个属性
@ConfigurationProperties使用前提就是注解的类必须在容器中,因此使用@Component与其配合

在引入@ConfigurationProperties时Idea可能会提示
在这里插入图片描述
点击Open Documentation进入官方发现需要我们引入一个依赖
在这里插入图片描述
字面意思就是@ConfigurationProperties 注解过的类在配置yaml文件时会非常轻松,说人话就是配置的时候会自动提示

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

导入配置以后需要重新启动springboot程序才会生效

配置配置文件

下面两种方式二选一即可

yaml方式
server:
  port: 8081
person:
  name: jack
  age: 20
  gender: true
  map: {k1: v1,k2: v2,k3: v3}
  list:
    - 1
    - 2
    - 3
    - 4
    - 5

properties方式
server.port=8080
person.age=20
person.list=[2,2,2,2]
person.gender=false
person.map.K1=2
person.map.k2=2
person.name=Jack

注意:如果使用properties配置中有中文且结果出现乱码那么就需要修改idea的文件编码

测试

在完成上述操作之后,启动spring boot程序 ,类对象中的属性值就会默认从配置文件中映射。我们可以在单元测试里进行测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
    @Autowired
    private Person person;
    @Test
    public void contextLoads() {
        System.out.println(person);
    }

}

在这里插入图片描述
可以发现结果正确输出了。

@Value

在给类属性注入值时除了使用@ConfigurationProperties进行批量注入时,也可以通过@Value单个进行注入

// 使用配置文件中的项进行赋值
@Value("${person.name}")
private String name;
// 直接赋值
@Value("20")
private String age;

@Value和@ConfigurationProperties对比

@Value@ConfigurationProperties
松散语法不支持支持
sqel支持不支持
JSR303数据校验不支持支持
复杂类型封装不支持支持

如果某个业务逻辑中需要获取一下配置文件中的某项值可以使用@Value,

针对不同环境使用不同的配置文件

在实际开发项目中,会涉及到开发环境、测试环境、生产环境等不同环境会使用不同的配置,如果切换一个环境就对配置文件进行更改十分不妥,因此可以采用多个配置文件的方式来解决这个问题。
具体操作是将每个环境的参数写在不同的配置文件中,使用哪个环境就在主配置文件中通过spring.profiles.active设置即可。
在Spring Boot中多环境配置文件名需要满足application-{profile}.yml(或者.properties)的格式,其中{profile}对应你的环境标识,比如:
application-dev.yml:开发环境
application-test.yml:测试环境
application-prod.yml:生产环境

栗子:
在这里插入图片描述
主配置文件内容
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值