Spring Boot配置外部化

该文章将介绍怎样将Sping Boot的配置文件放到jar的外面。

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);
    }
}

按Profile不同环境读取不同配置

不同环境配置不同的配置非常有用。开发中我们会有开发环境(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
学习,学习,再学习!学,然后知不足。 —— 列宁
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号