欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot 如何自定义 配置文件

程序员文章站 2022-04-30 23:13:07
...

有时候我们需要引入自定义的外部配置,有一种方法比较简单,就是使用@PropertySource注解,使用该注解需要注意以下两点:

  1. 注意类的字段跟配置文件中对应。例如:
    person.computers[0].name person就是@ConfigurationProperties(prefix = "person")指定,computers对应Person类的computers字段,name对应Person类computers字段关联Computer下的name。
  2. 该注解不支持yml文件格式,只支持properties文件格式,如果你的配置文件是yml文件也不用担心,这里分享一个在线转换工具, http://toyaml.com/
  3. 如果配置文件有中文,请使用UTF-8编码的文件,不然会产生乱码问题,简单的办法就是使用编辑器创建一个UTF-8编码的空文件,把配置内容拷贝进去,然后把这个配置文件放到项目路径里即可。

Java代码如下:

package com.example.demo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.util.List;

@PropertySource(value = {"classpath:config/person.properties"}, encoding = "UTF-8")
@ConfigurationProperties(prefix = "person")
@Component
public class Person {
    private String name;
    private String address;
    private List<Computer> computers;

    public String getName() {
        return name;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public List<Computer> getComputers() {
        return computers;
    }

    public void setComputers(List<Computer> computers) {
        this.computers = computers;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                ", computers=" + computers +
                '}';
    }
}
package com.example.demo;

public class Computer {
    private String name;
    private String color;

    public String getName() {
        return name;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                '}';
    }
}

配置文件如下:

person.name=张三
person.address=北京

person.computers[0].name=苹果
person.computers[0].color=白色
person.computers[1].name=联想
person.computers[1].color=灰色

测试代码如下:

package com.example.demo;

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;

@SpringBootTest
@RunWith(SpringRunner.class)
public class DemoApplicationTests {

    @Autowired
    private Person person;

    @Test
    public void contextLoads() {
        System.out.println(person);
    }

}

 

相关标签: Java Spring Boot