写在前面

SpringBoot默认能够读取resources目录下的配置文件,当我们的配置文件不在SpringBoot默认能够读取的目录下怎么办?
@PropertySource,可以加载指定的、非application.properties文件的、未在SpringBoot默认加载目录的、自定义的属性文件(*.properties)到Spring容器中,@PropertySource目前还不支持对YML配置的读取。

加载目录

当我们创建一个SpringBoot项目时,默认在resources目录下就有一个application.properties文件,可以在该文件中进行相关配置。但是在SpringBoot中默认会从四个地方查找application.properties文件。
①。项目根目录下的config目录下
②。项目根目录下
③。resources目录下的config目录下
④。resources目录下
在这里插入图片描述

@PropertySource注解

例:在resource目录下,自定义了一个mallx.properties文件,根据上面的描述可知,该文件不会自动别加载:

mallx.spu.title=大学生白色丝袜
mallx.spu.price=7500
mallx.spu.stock=999

可以使用@PropertySource + @Value 或者 @PropertySource + @ConfigurationProperties,这两种方式完成配置文件的加载和读取。

方式一:@PropertySource + @Value组合使用
@Component
@PropertySource("classpath:mallx.properties")
public class MallxSpu {
    @Value("${mallx.spu.title}")
    private String title;
    @Value("${mallx.spu.price}")
    private Long price;
    @Value("${mallx.spu.stock}")
    private Integer stock;
}
方式二:@PropertySource@ConfigurationProperties组合使用,使用SpringBoot类型安全的属性注入策略进行配置文件的加载。当配置的属性非常多的时候,采用@Value比较繁琐,引入@ConfigurationProperties注解,并配置了属性的前缀,Spring会自动将Spring容器中对应的数据注入到对象对应的属性中。
@Component
@PropertySource("classpath:mallx.properties")
@ConfigurationProperties(prefix = "mallx.spu")
public class MallxSpu {
    private String title;
    private Long price;
    private Integer stock;
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐