View on GitHub

spring-boot-in-action

Spring Boot 实战笔记

使用 Profile 进行部署环境配置

当应用程序需要部署到不同的运行环境时,一些配置细节通常会有所不同。

Spring Framework从 Spring 3.1开始支持基于Profile的配置。

Profile是一种条件化配置,基于运行时激活的Profile,会使用或者忽略不同的Bean或配置类。

示例

假设我们在 SecurityConfig 类 里创建的安全配置是针对生产环境的。

在这个例子中,我们就能为 SecurityConfig 加上 @Profile 注解:

@Profile("production")
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{}

这里用的 @Profile 注解要求运行时激活 production Profile,这样才能应用该配置。

如果production Profile没有激活,就会忽略该配置,而此时缺少其他用于覆盖的安全配置,于是应用自动配置的安全配置。

激活配置

设置 spring.profiles.active 属性就能激活Profile,任意设置配置属性的方式都能用于设置这个值。

方法一:application.yml

spring:
  profiles:
    active: production

方法二:application.properties

spring.profiles.active=production

使用特定于Profile的属性文件

如果你正在使用application.properties,可以创建额外的属性文件,遵循application-{profile}.properties这种命名格式,这样就能提供特定于Profile的属性了。

示例:针对生产环境和开发环境能有不同的日志配置

开发环境的配置可以放在名为application-development.properties的文件里,配置包含日志级别和输出到控制台:

logging.level.root=DEBUG

对于生产环境,application-production.properties会将日志级别设置为 WARN 或更高级别,并将 日志写入日志文件:

logging.path=/var/logs/
logging.file=BookWorm.log
logging.level.root=WARN

使用多Profile YAML文件进行配置

方法一:创建多个 YAML 文件

如果使用YAML来配置属性,则可以遵循与配置文件相同的命名规范,即创建 application-{profile}.yml 这样的YAML文件,并将与Profile无关的属性继续放在application.yml里。

方法二:在一个 YAML 文件中配置

如下这个application.yml文件分为三个部分,使用一组三个连字符( — )作为分隔符。

第二段和第三段分别为 spring.profiles 指定了一个值,这个值表示该部分配置应该应用在哪个 Profile 里 。

logging:
  level:
    root: INFO

--- 

spring:
  profiles: production
server:
  port: 8443
  ssl:
    key-store: mykeys.jks
    key-store-password: springboot
    key-password: springboot
    
--- 

spring:
  profiles: test
server:
  port: 8000
logging:
  level:
    root: DEBUG

第一段并未指定 spring.profiles ,因此这里的属性对全部Profile都生效,或者对那些未设置该属性的激活Profile生效。

在生产环境中,指定端口 8443,并开启 https。

在测试环境中,指定端口 8000,并将日志级别设置为 DEBUG。