Spring Boot 如何自定义 配置文件
程序员文章站
2022-04-30 23:13:07
...
有时候我们需要引入自定义的外部配置,有一种方法比较简单,就是使用@PropertySource注解,使用该注解需要注意以下两点:
- 注意类的字段跟配置文件中对应。例如:
person.computers[0].name person就是@ConfigurationProperties(prefix = "person")指定,computers对应Person类的computers字段,name对应Person类computers字段关联Computer下的name。
- 该注解不支持yml文件格式,只支持properties文件格式,如果你的配置文件是yml文件也不用担心,这里分享一个在线转换工具, http://toyaml.com/。
- 如果配置文件有中文,请使用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);
}
}
推荐阅读
-
如何在Spring Boot中使用Quartz
-
Spring Boot JPA如何把ORM统一起来
-
Spring boot创建自定义starter的完整步骤
-
详解spring boot starter redis配置文件
-
SpringBoot 源码解析 (七)----- Spring Boot的核心能力 - SpringBoot如何实现SpringMvc的?
-
[Spring Boot]使用自定义注解统一请求返回值
-
spring boot启动时加载外部配置文件的方法
-
spring boot使用自定义的线程池执行Async任务
-
spring boot静态变量注入配置文件详解
-
Spring Boot 配置文件详解(小结)