Spring Boot-4核心配置文件application和自定义配置文件properties/yml的读取

本文介绍了Spring Boot中如何读取核心配置文件application.properties或application.yml,以及如何处理自定义配置文件。对于自定义配置,分别展示了.properties和.yml文件的读取方法,并解决了一个在读取.yml文件时遇到的值为null的问题,指出@PropertySource不支持.yml,应使用配置Bean的方式来加载。
摘要由CSDN通过智能技术生成

  Spring-Boot的核心配置文件是application.properties或application.yml,文件名是写死的。可以根据自己习惯选择。他们都放在/src/main/resources路径下。当变量较少或者属于全局变量时候,我们通常会将它们放在核心配置文件中。如果变量较多或不属于全局变量,为了核心配置文件不显得冗余繁杂,我们自定义配置文件,存放这些变量。

  核心配置文件的读取

  

    

  先放两中文件的图,读取有两种方式:

  方式一:@Value

  在我上个博客讲过了,这次不再重复。传送门:点击打开链接

  方式二:Environment

  使用@Autowired引入,然后调用getProperty(String key)即可。如图:

  

  我们启动项目,访问http://localhost:8080/name

 

  自定义配置文件的读取 

  对于自定义配置文件,以properties结尾和yml结尾的我们分开讲。

  提出一个需求:我们项目需要定义一个学生的信息,包括姓名,年龄

  *.properties的读取

  我们在src/main/resources下创建一个config文件夹,在config下创建student.properties,创建Student.java

  

  

   

  这样就可以在controller里面使用了。使用@Autowired注入Student对象

  *.yml的读取

  

  

  启动项目,访问http://localhost:8080/name,发现:

  

 值为null,感觉很奇怪。百度很久发现是注解除了问题。查看官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-yaml-shortcomings

  @PropertySource不支持对yml的加载

  我们做以下改动,Student.java类上不再使用@PropertySource加载自定义的yml文件,将其删除。使用配置Bean的方式加载。

@Configuration
public class MyConfig {

	// 加载YML格式自定义配置文件
	@Bean
	public static PropertySourcesPlaceholderConfigurer properties() {
		PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
		YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
		// yaml.setResources(new FileSystemResource("application-cat.yml"));// File引入
		yaml.setResources(new ClassPathResource("config/student.yml"));// class引入
		configurer.setProperties(yaml.getObject());
		return configurer;
	}

}

  启动项目,再次访问http://localhost:8080/name,发现正常

  

注意:加载properties文件使用@PropertySource注解。读取xml文件使用@ImportResource。用反了会报错:

  Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。

 

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值