您现在的位置是:首页 >其他 >SpringBoot properties和yml配置文件的设置与读取网站首页其他
SpringBoot properties和yml配置文件的设置与读取
简介SpringBoot properties和yml配置文件的设置与读取
参考资料
目录
一. 设置配置文件
1.1 自定义参数
⏹.properties
配置文件
# 自定义参数
project-user.name: jiafeitian
# 自定义参数的引用,直接通过${}引用配置信息
project-admin.name: ${project-user.name}
⏹.yml
配置文件
project-user:
name: jiafeitian
project-admin:
name: ${project-user.name}
1.2 随机数生成
在一些特殊情况下,有些参数我们希望它每次加载的时候不是一个固定的值,比如:密钥、服务端口等。
在Spring Boot的属性配置文件中,我们可以通过使用${random}配置来产生随机的int值、long值或者string字符串,这样我们就可以容易的通过配置来属性的随机生成,而不是在程序中通过编码来实现这些逻辑。
⏹.properties
配置文件
# 随机字符串
com.jmw.blog.random-str = ${random.value}
# 随机int
com.jmw.blog.random-int = ${random.int}
# 随机long
com.jmw.blog.random-long = ${random.long}
# 10以内的随机数
com.jmw.blog.random-0-10 = ${random.int(10)}
# 10-20的随机数
com.jmw.blog.random-10-20 = ${random.int[10,20]}
⏹.yml
配置文件
com:
jmw:
blog:
random-0-10: ${random.int(10)}
random-10-20: ${random.int[10,20]}
random-int: ${random.int}
random-long: ${random.long}
random-str: ${random.value}
1.3 数组配置
⏹.properties
配置文件
- 通过逗号进行分隔
com.jmw.address = china01,china02,china03
com.jmw.hobby = eat,sleep,study
⏹.yml
配置文件
- 通过逗号进行分隔
com:
jmw:
address: china01,china02,china03
hobby: eat,sleep,study
1.4 Map配置
⏹.properties
配置文件
- 方式1: 直接写配置对象
com.jmw.info = {id: "110120", sex: "man"}
- 方式2: ❗方式2主要通过获取信息的时候,将其转换为Map
com.jmw.device.pc=111
com.jmw.device.app=222
com.jmw.device.weichat=333
⏹.yml
配置文件
- 方式1
com:
jmw:
info: '{id: "110120", sex: "man"}'
- 方式2
com:
jmw:
device:
app: 222
pc: 111
weichat: 333
二. 读取配置文件
- 读取配置文件分为
@value注解
手动读取和@ConfigurationProperties注解
自动读取两种方式。 @ConfigurationProperties注解
自动读取的话,如果不使用@Configuration
注解将其放入Spring的IOC容器中的话,需要配合@EnableConfigurationProperties
注解使用,详情可参照 2.3 章节
2.1 普通信息的读取
⏹通过@Value
注解实现
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
@Getter
@Configuration
public class ProjectConfig1 {
@Value("${project-user.name}")
private String projectUserName;
@Value("${project-admin.name}")
private String projectAdminName;
@Value("${com.jmw.blog.random-str}")
private String randomStr;
@Value("${com.jmw.blog.random-int}")
private String randomInt;
@Value("${com.jmw.blog.random-long}")
private String randomLong;
@Value("${com.jmw.blog.random-0-10}")
private String random0And10;
@Value("${com.jmw.blog.random-10-20}")
private String random10ANd20;
}
???效果
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Controller;
@Controller
public class J002ConfigTest implements CommandLineRunner {
@Autowired
private ProjectConfig1 config1;
@Override
public void run(String... args) throws Exception {
// 获取自定义的配置信息
System.out.println(config1.getProjectUserName());
// 自定义配置信息中的参数引用
System.out.println(config1.getProjectAdminName());
/*
* 获取配置文件中的随机数
*/
// 获取随机字符串
System.out.println(config1.getRandomStr()); // f6fdbef8bb19e7ff5cba83b04ba8b414
// 获取随机int
System.out.println(config1.getRandomInt()); // -423013463
// 获取随机long
System.out.println(config1.getRandomLong()); // 8471851910099450609
// 获取0到10之间的随机数
System.out.println(config1.getRandom0And10()); // 6
// 获取10到20之间的随机数
System.out.println(config1.getRandom10ANd20()); // 17
}
}
2.2 数组信息的读取
⏹@Value注解
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Configuration
public class ProjectConfig1 {
// 读取配置文件中的数组
@Value("${com.jmw.address}")
private String[] address;
}
⏹@ConfigurationProperties注解自动装配
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "com.jmw")
public class ProjectConfig2 {
// 自动创配为Array
private String[] address;
}
???获取
@Controller
public class J002ConfigTest implements CommandLineRunner {
@Autowired
private ProjectConfig1 config1;
@Autowired
private ProjectConfig2 config2;
@Override
public void run(String... args) throws Exception {
// 获取配置文件中的Array
String[] address = config1.getAddress();
System.out.println(Arrays.toString(address)); // [china01, china02, china03]
System.out.println(Arrays.toString(config2.getAddress())); // [china01, china02, china03]
}
}
2.3 List信息的读取
⏹@Value注解
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Configuration
public class ProjectConfig1 {
// 读取配置文件中的数组,使用SpEL表达式将其转换为List
@Value("#{'${com.jmw.hobby}'.split(',')}")
private List<String> hobby;
}
⏹@ConfigurationProperties注解自动装配
- 注意,此时的配置文件并没有添加到Spring的IOC容器中
- 需要使用该配置文件的时候,需要配合
@EnableConfigurationProperties
注解使用
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@ConfigurationProperties(prefix = "com.jmw")
public class ProjectConfig2 {
// 自动创配值List
private List<String> hobby;
}
???获取
- 因为
ProjectConfig2
配置文件并没有在Spring的IOC容器中,所以必须使用EnableConfigurationProperties
注解开启后才能注入使用,否则会报错。
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.boot.CommandLineRunner;
@Controller
@EnableConfigurationProperties(ProjectConfig2.class)
public class J002ConfigTest implements CommandLineRunner {
@Autowired
private ProjectConfig1 config1;
@Autowired
private ProjectConfig2 config2;
@Override
public void run(String... args) throws Exception {
// 获取配置文件中的List
List<String> hobby = config1.getHobby();
System.out.println(hobby); // [eat, sleep, study]
System.out.println(config2.getHobby()); // [eat, sleep, study]
}
}
2.4 Map信息的读取
- @Value注解需要配合SpEL表达式(#{…})来获取,
且只能获取{id: "110120", sex: "man"}
样式的数据 - @ConfigurationProperties注解自动装配无法获取
{id: "110120", sex: "man"}
样式的数据,只能自动装配com.jmw.device.pc
这种层次的数据。
⏹@Value注解
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Configuration
public class ProjectConfig1 {
// 读取Map的配置,需要使用SpEL表达式(#{...})
@Value("#{${com.jmw.info}}")
private Map<String,String> infoMap;
}
⏹@ConfigurationProperties注解自动装配
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "com.jmw")
public class ProjectConfig2 {
/**
* 通过@ConfigurationProperties注解自动完成Map的配置
* 属性的名称一定要和配置文件中的保持一致,否则无法自动完成装配
*/
private Map<String,String> device;
}
???获取
@Controller
public class J002ConfigTest implements CommandLineRunner {
@Autowired
private ProjectConfig1 config1;
@Autowired
private ProjectConfig2 config2;
@Override
public void run(String... args) throws Exception {
// 获取配置文件中的Map
Map<String,String> infoMap = config1.getInfoMap();
System.out.println(infoMap); // {id=110120, sex=man}
System.out.println(config2.getDevice()); // {app=222, pc=111, weichat=333}
}
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。