针对小项目,非分布式没有统计配置中心,开发时候会面临打包配置不同的环境,例如我遇到的项目,在公司有测试环境,稳定环境,现场有现场测试,现场稳定环境,针对不同环境需要不同的配置。
这时候可考虑把配置抽离出来,对每个环境放对应的配置文件,且直接放在jar包外面即可。详细说明如下:
SpringBoot项目在运行时默认的配置文件application.properties是可以直接放在jar包外面的,且读取优先级如下:
config/application.properties > application.properties > classpath:application.properties
所以你的项目可以这样配置
spring:
profiles:
active: dev
然后再把application-dev.yml也放在外面且与application.yml同级。
但如上的配置之能针对住配置文件,如果有其他的配置文件怎么办呢?如下:
@Component
@ConfigurationProperties(prefix="ftp")
@PropertySource(value = {"classpath:ftp.properties","file:config/ftp.properties"},ignoreResourceNotFound =true)
@Data
public class FtpConfig {
private String Host;
private int Port;
private String UserName;
private String PassWord;
}
其最重要的是@PropertySource注解的配置,上面的ConfigProperties 属性源有两个:
“classpath:config.properties"和"file:config/config.properties”
这两个属性分别表示类路径下的配置文件和jar包外部的config文件夹下的配置文件。这里将"file:config/ftp.properties"放在后面,代表优先使用jar包外部config文件夹下的配置文件,如果没有,就使用类路径下的。在这样使用时,需要添加ignoreResourceNotFound =true 配置,避免第二个路径找不到的情况下spring boot启动时报错(找不到文件)。