今天说说地球小伙伴的一个问题:问题不难,解决方法也很多,所以决定写一篇文章来谈谈这个问题详细。1.配置文件位置首先小伙伴们要明白,SpringBoot默认加载的配置文件是application.properties或者application.yaml。默认的加载位置有五个,这五个位置可以分为两类:从类路径加载,又细分为两种:直接读取类路径下的配置文件,对应SpringBoot项目,也就是配置在资源目录下。读取classpath:/config/目录下的文件,对应SpringBoot项目中resources/config目录下的配置。两种情况如下图:从项目所在当前目录加载,又细分为三种情况:从项目当前目录加载配置文件。从项目当前目录的config文件夹中加载配置文件。从项目当前目录的config文件夹的子文件夹中加载(不允许孙子)。这三种情况如下图所示:可以加载config目录下的配置文件,也可以加载config/a目录下的配置文件,但是config/a/b目录下的配置文件会不会加载,因为它们不是直接子代。文件夹。配置文件可以放在很多不同的位置。如果同一个属性写在多个配置文件中,后面加载的配置会覆盖前面的配置。比如在classpath:application.yaml中设置项目端口号为8080,在项目当前目录/config/a/application.yaml中设置项目端口号为8081,那么最终的项目端口号就是8081。这是默认文件位置。如果你不想让你的配置文件叫application.properties或者application.yaml,你也可以自定义配置文件的名字。您只需要在项目启动时指定配置文件名即可。比如我想把我的配置文件名设置为app.yaml,那么我们在启动jar包的时候可以这样配置。这时候系统会自动去上面提到的五个位置找到对应的配置文件:java-jarboot_config_file-0.0.1-SNAPSHOT.jar--spring.config.name=app如果项目已经打包成一个jar包并启动,那么在前面提到的目录中,最后三个项目的当前目录是指jar包所在的目录。如果不想在这五个位置搜索,也可以在启动jar包时指定配置文件的位置和名称,如下:java-jarboot_config_file-0.0.1-SNAPSHOT.jar--spring。config.location=optional:classpath:/app.yaml注意我在classpath前面加了optional:表示如果配置文件不存在则默认启动,不会报错说配置找不到文件。如果不加这个前缀,当系统找不到指定的配置文件时,会抛出ConfigDataLocationNotFoundException,导致应用无法启动。如果配置文件和jar包在同一个目录结构,如下图:那么启动脚本如下:java-jarboot_config_file-0.0.1-SNAPSHOT.jar--spring.config.location=optional:javaboy/app.yaml如果spring.config.location的配置只指定了目录,所以必须以/结尾。比如上面的启动脚本也可以这样启动:java-jarboot_config_file-0.0.1-SNAPSHOT.jar--spring.config.location=optional:javaboy/--spring.config.name=appLockthelocation通过spring.config.location属性锁定配置文件,通过spring.config.name属性锁定配置文件的文件名。2.附加位置我们上面对配置文件的位置所做的设置都会覆盖已有的配置。如果不想覆盖SpringBoot默认的配置文件搜索策略,想自己添加,可以指定配置文件的位置,如下:java-jarboot_config_file-0.0.1-SNAPSHOT.jar--spring。config.additional-location=optional:javaboy/app.yaml如果这个额外指定的配置文件与已有的配置文件冲突,则以后来者为准。3.存在位置通配符的情况。假设我有redis和mysql配置。我想把它们放在两个不同的文件夹中,方便管理,像这样:然后在项目启动的时候,可以通过通配符批量扫描*对应的文件夹:java-jarboot_config_file-0.0.1-SNAPSHOT.jar--spring.config.location=optional:config/*/使用通配符批量扫描mysql和redis目录时,默认加载顺序是按照文件夹首字母排序,即先加载mysql目录,再加载redis目录。需要注意的是,通配符只能用在外部目录中,不能用在classpath中的目录中。另外,一个包含通配符的目录只能有一个通配符*,不能有多个,并且必须以*/结尾,即一个目录的最后一部分可以不确定。4、导入外部配置从SpringBoot2.4开始,我们也可以使用spring.config.import方法导入配置文件。与附加位置配置相比,这种导入方式更加灵活,可以导入任意名称的配置文件。spring.config.import=optional:file:./dev.properties甚至,这个spring.config.import也可以导入不带扩展名的配置文件。比如我有一个properties格式的配置文件,但是这个配置文件没有扩展名,现在想把它导入为properties格式的配置文件,如下:spring.config.import=optional:file:/Users/sang/dev[.properties]好了,看了上面的内容,文章开头的问题的答案我就不用多说了吧~
