SpringBoot Profiles(Profile分组、Profile配置文件)、外部化配置

1. profiles

环境隔离能力;快速切换开发、测试、生产环境

步骤:

  1. 标识环境:指定哪些组件、配置在哪个环境生效
  2. 切换环境:让这个环境对应的所有组件和配置生效

1.1. 使用

1.1.1 指定环境

  • Spring Profiles提供一种隔离配置的方式,使其仅在特定环境生效
  • 任何@Component, @Configuration或@ConfigurationProperties等容器中的所有组件,都可以使用@Profile标记,来指定何时被加载。如@Profile({"dev"})
  • 在@Configuration注解的配置类中,使用@Bean添加的组件。如果给类注解@Profile({"dev"}),给方法注解@Profile({"test"}),需要激活--spring.profiles.active=dev,test才能将Bean添加到容器

1.1.2 环境激活

  • 不标注@Profile的组件永远都激活
  • 激活方式:
    1. application.properties配置文件激活指定环境:spring.profiles.active=dev,test
    2. 也可以使用命令行Program arguments激活:--spring.profiles.active=dev,test
  • 未激活环境,可以配置默认环境,默认的环境是default。可以通过spring.profiles.default=dev进行修改。不推荐使用默认环境

注意:spring.profiles.activespring.profiles.default只在application.properties生效,在application-dev.properties等profile配置文件无效

1.1.3 环境包含

指定一个环境,不管是否激活该环境,该环境都被激活

spring.profiles.include[0]=common
spring.profiles.include[1]=log

最佳实战:

  • 生效的环境 = 包含的环境 + 激活的环境/默认环境
  • 项目里面这么用
    • 基础的配置mybatis、log、xxx:写到包含环境中
    • 需要动态切换变化的db、redis:写到激活的环境中

1.2. Profile分组

创建group1组,指定包含dev和test环境

spring.profiles.group.group1[0]=dev
spring.profiles.group.group1[1]=test

spring.profiles.group.group1=dev,test

使用--spring.profiles.active=group1 ,就会激活dev和test环境

1.3 Profile配置文件

  • application-{profile}.properties可以作为指定环境的配置文件,如application-dev.properties。激活这个环境,这个环境的所有配置就会生效
  • 最终生效的所有配置是:application.properties + 激活的application-{profile}.properties。如果配置参数冲突,激活的profile配置文件优先级高
  • 如果同时激活多个配置文件。如spring.profiles.include=dev,test,多个配置文件都会生效,但相同参数冲突,则以后面的test为准

2. 外部化配置

2.1 场景

线上应用如何快速修改配置,并应用最新配置?

  • SpringBoot使用外部配置 + 配置文件优先级简化配置更新、简化运维
  • 只需要给jar应用所在的文件夹,或其config文件夹下,或其config文件夹下的一级文件夹下,放一个application.properties(也可以再放application-dev.propertiesd等)配置文件,重启项目就能自动应用最新配置

2.2 配置优先级

以下是SpringBoot属性源加载顺序。配置不同就都生效(互补)。相同配置优先级由低到高,高优先级配置覆盖低优先级

  1. 默认属性(通过自定义SpringApplication指定。通过.properties("key1=value1","key2=value2").properties(map)传递SpringBoot所有配置参数
  2. @PropertySource("classpath:my.properties")指定加载的配置(需要写在@Configuration类上才可生效)。或通过配置参数spring.config.import=classpath:my.properties导入额外配置
  3. 配置文件(application.properties等)
  4. RandomValuePropertySource支持的random.*配置(如:@Value(“${random.int}”))
  5. OS环境变量
  6. Java系统属性(System.getProperties())
  7. JNDI属性(来自java:comp/env)
  8. ServletContext初始化参数
  9. ServletConfig初始化参数
  10. SPRING_APPLICATION_JSON属性(内置在环境变量或系统属性中的JSON)
  11. 命令行参数。会被添加到环境变量
  12. 测试属性(@SpringBootTest进行测试时指定的属性)
  13. 测试类@TestPropertySource注解
  14. Devtools设置的全局属性($HOME/.config/spring-boot)

配置文件优先级如下:(后面覆盖前面)

  1. jar包内
    1. classpath
      1. application.properties
      2. application-{profile}.properties
    2. classpath:/config
      1. application.properties
      2. application-{profile}.properties
  2. jar包所在文件夹
    1. application.properties
      1. 当前路径
      2. 当前路径\config
      3. 当前路径\config\xxx
    2. application-{profile}.properties
      1. 当前路径
      2. 当前路径\config
      3. 当前路径\config\xxx

注意:

  • 如果.properties和.yml配置文件同时存在,则.properties优先级高
  • application.properties中可以使用key2=${key1:defaultValue}_test,进行参数的获取拼接
  • 可以在类中,使用注入的方式@Value("${key2:defaultValue}"),获取application.properties的配置参数值
  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SpringBoot中可以通过配置profile来实现多环境的配置文件,只需要在application.properties或application.yml中添加spring.profiles.active属性,指定当前激活的环境即可。例如,可以在application.properties中添加:spring.profiles.active=dev,这样SpringBoot就会激活dev环境,加载application-dev.properties等配置文件。 ### 回答2: SpringBoot配置多环境的配置文件可以通过以下步骤实现: 1. 创建配置文件:在项目的资源文件夹下创建多个不同环境的配置文件,通常以"application-"开头,并在文件名中添加环境标识,如"application-dev.properties"、"application-test.properties"等。 2. 配置文件内容:在各个配置文件中,根据不同环境的需求,设置不同的配置属性值。可以设置数据库连接、服务端口、日志级别等等。 3. 设置激活环境:在主配置文件(通常是"application.properties")中,通过设置"spring.profiles.active"属性来指定当前激活的环境。例如,设置为"dev"表示激活开发环境。 4. 使用配置属性:在代码中,可以使用"@Value"注解或者使用"Environment"对象来获取配置文件中的属性值。通过这种方式,可以根据不同环境的配置来动态改变应用程序的行为。 5. 多个配置文件的优先级:当存在多个配置文件时,SpringBoot将按照一定的优先级进行加载。其中,主配置文件具有最低优先级,而具体环境的配置文件具有更高的优先级。因此,如果某个配置属性在多个文件中都存在,那么后加载的配置文件会覆盖前面加载的配置。 通过以上步骤,我们就可以在SpringBoot项目中实现多环境的配置文件。这样,我们可以根据不同的环境需求,灵活地配置应用程序的各个属性,提高了适应不同环境变的能力。 ### 回答3: Spring Boot配置多环境的配置文件可以通过使用不同的配置文件来实现。一种常用的配置方式是通过在application.properties(或application.yml)文件中使用不同的profile来指定环境。 首先,在src/main/resources目录下创建application-{profile}.properties(或application-{profile}.yml)文件,其中{profile}代表环境名称,例如application-dev.properties(或application-dev.yml)代表开发环境配置文件,application-prod.properties(或application-prod.yml)代表生产环境配置文件。 然后,在application.properties(或application.yml)文件中,添加一个配置spring.profiles.active={profile}来指定使用哪个环境的配置文件。例如,如果想要使用开发环境配置文件,可以设置spring.profiles.active=dev。 接下来,在具体的配置文件中,可以根据不同的需要设置不同的配置项。例如,在开发环境配置文件中可以设置数据库连接的URL为本地环境的URL,而在生产环境配置文件中可以设置数据库连接的URL为线上环境的URL。 最后,在代码中通过注解@Value("${配置项名称}")来获取配置文件中的配置项的值。Spring Boot会根据当前使用的环境自动加载相应的配置文件,并将对应的配置项的值注入到相应的字段中。 通过这种方式,我们可以根据不同的环境使用不同的配置文件,方便地进行开发、测试和部署。同时,Spring Boot还支持其他灵活的配置方式,例如使用命令行参数或环境变量来指定使用哪个环境的配置文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值