SpringBoot配置文件的测试验证(springboot配置文件怎么读取)

以下所说的内容没有bootstrap.yml什么事

如果在启动时没有指定环境变量的话

启动优先读取application.yml、application.yaml、application-default.yml

然后在application.yml中指定了spring.profiles.active的话,此时对应的yml文件会被读取到。例如:在application.yml中指定spring.profiles.active=test

此时对应的application-test.yml会生效,配置文件中的内容也会被读到。

但是此时指定spring.config.location、spring.config.name的话,则不会生效。

原理在于Spring在读取到所有的yml文件的内容后,最终才会加载到环境中。而获取spring.config.location、spring.config.name的代码是在读取yml的过程中,虽然读取到了但是此时并没有加载到环境中,因此下次循环并不会读取到环境中的指定值。

但对于spring.profiles.active,当系统读取到spring.profiles.active后会立即添加到集合中从而参加下次的文件处理。

如果在启动时指定参数的话

如果在启动时环境变量指定了spring.config.location的话:

则所有的配置文件均应该在classpath:/config1/文件夹下,包括application.yml

如果在启动时环境变量指定了spring.config.location、spring.config.name的话:

则所有的配置文件均应该在classpath:/config1/文件夹下,且文件名均应该叫application666。原application.yml改名为application666.yml;原application-test.yml改名为application666-test.yml

注意,此时注意我上面的环境变量四个加粗字段,因为上面的配置我都加在了环境变量Environment variables

如果在启动时VM options指定了spring.config.location、spring.config.name的话:

注意,变量必须要以-D 、 -X 、 -XX开头

则所有的配置文件均应该在classpath:/config1/文件夹下,且文件名均应该叫application666。原application.yml改名为application666.yml;原application-test.yml改名为application666-test.yml

注意,此时注意我上面的VM options四个加粗字段,因为上面的配置我都加在了VM options

如果在启动时Program arguments指定了spring.config.location、spring.config.name的话:

注意:这里都是以--开头,否则的话不生效

则所有的配置文件均应该在classpath:/config1/文件夹下,且文件名均应该叫application666。原application.yml改名为application666.yml;原application-test.yml改名为application666-test.yml

注意,此时注意我上面的Program arguments四个加粗字段,因为上面的配置我都加在了Program arguments

也就是说如果我以任何方式指定了spring.config.location或者spring.config.name的话,则配置文件的路径或者名称均应该被修改,包含application.yml

关于VM options和Environment variables和Program arguments

从代码层面的话,VM options被添加到了'systemProperties'中,而Environment variables则被添加到'systemEnvironment'中,Program arguments被添加到'commandLineArgs'

VM options被理解为jvm参数,而Environment variables被理解为系统环境变量。VM options的优先级更高。

而启动参数Program arguments,并不是随着环境的创建而创建,则是单独被添加到环境中的

关于这三个参数的解释: