【Spring Boot】多环境配置

1.Profile 的概念

为了实现多环境配置需要使用profile,有两种profile:
(1)Spring Profile
Spring可使用Profile决定程序在不同环境下执行情况,包含配置、加载Bean、依赖等。
Spring的Profile一般项目包含:dev(开发), test(单元测试), qa(集成测试), prod(生产环境)。由spring.profiles.active属性决定启用的profile。

(2)Maven Profile
Maven同样也有Profile设置,可在构建过程中针对不同的Profile环境执行不同的操作,包含配置、依赖、行为等。Maven的Profile由 pom.xml 的标签管理。每个Profile中可设置:id(唯一标识), properties(配置属性), activation(自动触发的逻辑条件), dependencies(依赖)等。

2.Spring 配置Profile的实现方式

Spring boot为profile的配置提供了很好的支持,比如默认的application配置文件默认就支持按照profile使用对应的application-{profile}配置文件,非常方便。下面介绍两种方法:
(1) application.properties方式
SpringBoot的配置文件默认为 application.properties。不同Profile下的配置文件由application-{profile}.properties管理,同时独立的 Profile配置文件会覆盖默认文件下的属性。激活方式:

  • 在application.properties文件中激活
spring.profiles.active=dev
  • 运行jar包时激活
java -jar hello.jar --spring.profiles.active=test
或者
java -Dspring.profiles.active=test -jar hello.jar 

(2)application.yml文件方式
只需要一个application.yml文件即可

spring:
  profiles:
    active: dev
---
spring:
 profiles: dev
server:
 port: 9001
---
spring:
 profiles: test
server:
 port: 9002
---
spring:
 profiles: proc
server:
 port: 9003

application.yml文件分为四部分,使用一组(---)来作为分隔符,第一部分,为通用配置部分,并指定使用的环境,表示三个环境都通用的属性

3.Maven Profile配置Profile的实现方式

上面的springboot的profile配置方式存在两点不足:

  • 对配置文件路径和命名的约定, 造成了很大的不灵活性
  • 把所有配置文件都打进jar包有点太粗暴,当然没有强迫症的不考虑。

这时候我们就可以结合maven profile 一起使用。具体步骤:
(1)配置Profile


//Maven的Profile配置了两个:dev和prod

    
        dev
        
            true
        
        
//profileActive:申明的属性,此处对应Spring的Profile值
            dev
        
//dev中使用了内嵌Tomcat,而 prod 中没有
        
            
                org.springframework.boot
                spring-boot-starter-tomcat
            
            
                org.apache.tomcat
                tomcat-jdbc
            
        
    
    
        prod
        
            prod
        
    

(2)资源过滤配置
SpringBoot的 Profile选择需要在 application.properties中配置,如果定死在文件,那么每次打包都需要手动修改,很麻烦,而且容易出错。Maven的资源过滤功能可以实现在构建时修改以“@xxx@”表示的属性。资源过滤需要在pom.xml的标签下配置 resources:



//去掉src/main/resources下的所有application.properties文件
    
        src/main/resources
        
            application*.properties
        
    
//添加了application.properties默认配置文件和由profileActive属性决定的相应profile配置文件。
    
        src/main/resources
        
        true
        
            application.properties
            application-${profileActive}.properties
        
    

(3)Spring配置Profile

spring.profiles.active = @profileActive@

(4)构建
构建命令:

mvn clean package -Dmaven.test.skip=true -Pdev

4. 知识拓展- yaml语法

(1)语法要点:

  • 缩进
    需要每个缩进级别由两个空格组成。一定不能使用tab键
  • 冒号
    每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)
  • 分割符
    在一个文件中,可同时包含多个文件,并用"---"分隔。选择性的符号"..."可以用来表示文件结尾。在单一文件中,可用连续三个连字号(---)区分多个文件;
    (2)获取配置文件值
    使用@Value("${配置文件中的参数名}")获取值:
  # mail配置
spring:
  mail:
    host: smtp.test.cn
    port: 25
    username:[email protected]
    password: 1234
    properties:
      mail.smtp.auth: true
      mail.smtp.starttls.enable: true
      mail.smtp.starttls.required: true
//获取值
@Value("${spring.mail.username}")
private String from;

你可能感兴趣的:(【Spring Boot】多环境配置)