您现在的位置是:首页 >其他 >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}
	}
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。
        
    
        
     
            




 U8W/U8W-Mini使用与常见问题解决
U8W/U8W-Mini使用与常见问题解决 QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。... stm32使用HAL库配置串口中断收发数据(保姆级教程)
stm32使用HAL库配置串口中断收发数据(保姆级教程) 分享几个国内免费的ChatGPT镜像网址(亲测有效)
分享几个国内免费的ChatGPT镜像网址(亲测有效) Allegro16.6差分等长设置及走线总结
Allegro16.6差分等长设置及走线总结