首页 > 其他分享 >Spring Boot 加载外部配置文件

Spring Boot 加载外部配置文件

时间:2023-01-12 17:46:56浏览次数:57  
标签:profile 配置文件 Spring Boot jar application spring config properties

Spring Boot 允许你从外部加载配置,这样的话,就可以在不同的环境中使用相同的代码。支持的外部配置源包括:Java属性文件、YAML文件、环境变量、命令行参数

@Value注解可以将属性值直接注入到beans中。命令行参数以 -- 开头

配置文件加载的顺序如下:

  1. Application properties packaged inside your jar (application.properties and YAML variants)
  2. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)
  3. Application properties outside of your packaged jar (application.properties and YAML variants)
  4. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)

应用程序启动的时候,Spring Boot 会自动从以下位置查找并加载 application.properties 和 application.yaml 文件:

  1. The classpath root
  2. The classpath /config package
  3. The current directory
  4. The /config subdirectory in the current directory
  5. Immediate child directories of the /config subdirectory

查找顺序按优先级来,后面的可以覆盖前面的。文件中的每一项会作为PropertySources被添加到Spring Environment

如果你不想用"application"作为配置文件名称,可以在环境属性中通过spring.config.name来指定。还可以使用spring.config.location来显式指定配置文件的位置(文件路径或目录用逗号分隔)

注意,spring.config.name 和 spring.config.location 必须定义为一个环境属性(通常是一个OS环境变量、一个系统属性或一个命令行参数)

如果 spring.config.location 指定的是一个目录,那么必须以 / 结尾

无论直接指定文件还是包含在目录中,配置文件必须在其名称中包含文件扩展名。通常,扩展名支持 .properties, .yaml, .yml

举个栗子

指定单个文件

$ java -jar myproject.jar --spring.config.name=myproject

指定多个位置

$ java -jar myproject.jar --spring.config.location=optional:classpath:/default.properties,optional:classpath:/override.properties

默认情况下,如果指定的位置不存在,则会报错。如果你不确定它是否存在,使用使用 optional: 前缀

例如:

optional:classpath:/custom-config/,optional:file:./custom-config/

Profile Specific Files

Spring Boot 会尝试加载按照命名规约 application-{profile} 的文件,我们把这样的文件称为Profile-specific文件。

例如,如果你激活了一个名称为prod的profile,并且使用YAML文件,那么 application.yml 和 application-prod.yml 都会被尝试加载。

Profile-specific文件必须要和application.properties在相同的位置,而且profile-specific文件中的配置项会覆盖非profile-specific文件中相同的配置项。如果有多个profile-specific文件被激活,则后面会覆盖前面的。

举个例子,假设spring.profiles.active=prod,live,那么application-prod.properties中的配置项会被application-live.properties中的同名配置项覆盖。如果没有明确指定激活哪个profile,则application-default会被考虑激活。

YAML 文件

考虑下面的配置文件

hello:
  world: "hehe"

my:
  roles:
    - "admin"
    - "guest"

转换成properties文件应该是:

hello.world=hehe
my.roles[0]=admin
my.roles[1]=guest

Spring Framework提供了两个方便的类,可以用来加载YAML文档。YamlPropertiesFactoryBean 将 YAML 作为 Properties 加载,而 YamlMapFactoryBean 将 YAML 作为一个 Map 加载。

可以用@Value注解将属性值注入到bean中

@Value("${hello.world}")
private String wahaha;

@Value("${my.roles[1]}")
private String roles1;

划重点

1、支持四种外部配置源:Java属性文件、YAML文件、环境变量、命令行参数;
2、配置文件查找位置,依次为:
  (1) classpath 根路径
  (2) classpath 根路径下config目录
  (3) jar包当前目录
  (4) jar包当前目录的config目录
  (5) /config子目录的直接子目录
3、配置文件加载顺序:
  (1) 当前jar包内部的application.properties和application.yml
  (2) 当前jar包内部的application-{profile}.properties 和 application-{profile}.yml
  (3) 引用的外部jar包的application.properties和application.yml
  (2) 引用的外部jar包的application-{profile}.properties 和 application-{profile}.yml
4、后面的可以覆盖前面的同名配置项

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-files

Spring Boot 加载外部配置文件 - 废物大师兄 - 博客园 (cnblogs.com)















标签:profile,配置文件,Spring,Boot,jar,application,spring,config,properties
From: https://www.cnblogs.com/haolb123/p/17047338.html

相关文章

  • IDEA的Services中添加SpringBoot启动和npm启动
    1、添加SpringBoot启动点击页面最下方Services,在弹出框中点击左上角最右侧的+,在点击RunConfigurationType,在弹出框AddConfigurationType中找到SpringBoot点击......
  • 【SpringBoot】配置篇
      POM.XML<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • 形象化认识Spring Cloud相关组件
    一、整体认识Springframework架构的项目就像一栋高楼大厦,一栋大厦里租用者各色各样的公司和企业为用户提供各种各样的服务。大厦里的每间办公室都是一个容器,对应着一个dock......
  • Spring Cloud alibaba之一 部署nacos & 集成dubbo
    环境nacos-2.2.0SpringCloud-2.1.2.RELEASECentOSLinuxrelease7.9.2009(Core) 部署三台虚拟机IP:192.168.6.102:8848,192.168.6.103:8848,192.168.6.1......
  • springdata入门(纯赶货)
    ​入门初始化springboot依赖引入<!--springdata--><dependency><groupId>org.springframework.boot</groupId><artifactI......
  • SpringBoot不同环境的配置文件讲解
    前言​ 源于工作中发现项目中的的application.yml有多样的application.yml,如下图所示:​ 了解过后发现是因为测试环境和生产环境一些配置可能会有差异,比如数据库的地址、......
  • Spring AOP 切面记录操作日志
    前言实际业务,有时候需要记录服务的操作日志,我们可以利用SpringAOP切面来拦截记录用户操作;用户使用session或者前端传值都可以。1.创建日志记录接口首先我们得有一个......
  • org.springframework.web.multipart.MultipartException: Could not parse multipart
    问题本地运行,调用上传文件接口,报错org.springframework.web.multipart.MultipartException:Couldnotparsemultipartservletrequest;nestedexceptionisjava.io......
  • springboot集成minio
    1、docker安装miniosudodockerrun-d--nameminio--restart=always-p9000:9000-p9001:9001-e"MINIO_ROOT_USER=minioroot"-e"MINIO_ROOT_PASSWORD=minioroot......
  • SpringBoot系列之Redis实现消息队列
    1前言本教程主要讲解的是如何在SpringBoot中用Redis实现消息队列。学习本教程的前提知识点是有SpringBoot、Redis、消息队列等基础。所以默认各位大佬已经掌握以上知识点。......