Spring Boot通常我们将它打包成jar文件,同时将application.properties 或 application.yml配置文件都打包到jar文件中。但是,在很多场景下面,我们需要去修改配置文件,如:端口、数据库地址等等。不可能每次修改都去修改源码中的配置,然后再次打包成jar文件。
其实,Spring Boot提供了将配置文件放置到jar文件外面的方法,下面将介绍两种方法:
SpringApplication会默认将命令行选项参数转换为配置信息。该种方式适合少量的配置,如果你需要修改很多配置,则命令行会很长;当然你也可以选择使用一个bat文件来启动程序。
例如,启动时命令参数指定:
java -jar test.jar --server.port=8080
上面将修改Spring Boot的端口为8080。
注意:从命令行指定配置项的优先级最高,不过你可以通过setAddCommandLineProperties()方法来禁用,如下:
SpringApplication.setAddCommandLineProperties(false);
Spring Boot程序会按优先级从下面这些路径来加载 application.properties/application.yml 配置文件。优先级如下:
(1)当前目录下的/config目录
(2)当前目录
(3)classpath里的/config目录
(4)classpath 跟目录
因此,要外置配置文件就很简单了,在jar所在目录新建config文件夹,然后放入配置文件,或者直接放在配置文件在jar目录
如果你不想使用 application.properties 名称作为配置文件,或者配置文件再其他目录,怎么办?这个Spring Boot也考虑到了,在启动Spring Boot程序时,你通过设置 “--spring.config.location=你的配置文件路径” 参数来指定你的配置文件。如下:
java -jar test.jar --spring.config.location=classpath:/app1.properties,classpath:/app2.properties
或者
java -jar -Dspring.config.location=C:\config.properties test.jar
当然,还能在代码里指定。如下:
@SpringBootApplication @PropertySource(value={"file:config.properties"}) public class SpringbootrestdemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootrestdemoApplication.class, args); } }
不同环境配置不同的配置非常有用。开发中我们会有开发环境(dev)、测试环境(test)和正式环境(prod)。为不同的环境配置一个配置文件,例如:
开发环境 application-dev.properties
测试环境 application-test.properties
正式环境 application-prod.properties
在 application.properties 中通过 “spring.profiles.active” 指定使用哪一个文件,如下:
spring.profiles.active=dev
注意:这里不能填写配置文件全名称,只需要填写横线“-”和点“.”之间的字符。如:dev、test和prod
当然,你也可以在运行的时候手动指定:
java -jar myproject.jar --spring.profiles.active=prod