使用 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。