【SpringBoot学习】05. 多环境配置

项目地址https://gitee.com/better-code/SpringBoot-Example/springboot05/


Profiles

Spring profiles 配置多环境,就是将一个配置文件拆分成多个配置文件,动态指定一个配置文件生效。

active 和 include

spring:
  profiles:
  active: dev,server
  include: wxconfig,shiro

spring.profiles.active 指定哪一个配置文件生效
spring.profiles.include 无条件的添加该配置,springApplication.setAdditionalProfiles() 也可以提供和include同等的功能。

使用 spring.profiles.active 激活配置文件

下面2种方式都可以激活配置文件

  • application.ymlapplication.properties
spring:
  profiles: 
    active: dev
  • 命令行 --spring.profiles.active=prod
    在执行jar包时指定属性
java -jar xxx.jar --spring.profiles.active=prod

配置多环境

单文件


spring:
  profiles:
    active: dev

---
## 开发环境
spring:
  profiles: dev
  ## 数据源
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root

server:
  ## 服务器端口
  port: 8080

---
## 测试环境
spring:
  profiles: test
  ## 数据源
  datasource:
    url: jdbc:mysql://192.168.0.152:3306/test
    username: root
    password: root

server:
  ## 服务器端口
  port: 8090

---
## 正式环境
spring:
  profiles: prod
  ## 数据源
  datasource:
    url: jdbc:mysql://42.83.32.46:3306/prod
    username: root
    password: root

server:
  ## 服务器端口
  port: 80
  

--- 表示文档开始的分隔符(也可以使用...作为文档结束的分隔符),最上面是通用配置,下面3个是不同环境的配置。

多文件

创建不同环境的配置文件 application-dev.ymlapplication-test.ymlapplication-prod.yml ,将与环境相关的属性放在里面。

不管单文件还是多文件,激活方式都是一样的。都是使用 spring.profiles.active 属性。

Maven 方式

在pom中设置


    
    @



    
        dev
        
            dev
        
        
            true
        
    
    
        test
        
            test
        
    
    
        prod
        
            prod
        
    



    
        
            src/main/resources
            true
        
    

application.yml 中设置

spring: 
  profiles:
    active: @spring.profiles.active@

这样的话,平时开发默认的 dev

当打正式环境的jar包时,执行mvn clean package -P prod,jar包里application.yml的@spring.profiles.active@ 就被替换为 prod 了。

maven 资源过滤功能

上面主要用了maven的资源过滤,这里简单讲一下。

pom文件经常有一些 property ,如下


    1.8
    1.4.0
    1.1.10
    2.3.2

定义了这些 property 之后,就可以在pom里直接使用了。如



    org.apache.shiro
    shiro-core
    ${shiro.version}

使用方式如上:${shiro.version}


要是在pom里定义一个property jdbc:mysql://192.168.0.1:3306/test ,能不能在 application.yml 中也能像pom里那样使用,如

spring: 
  datasource: 
    url: ${datasource.url} 

maven说可以。只要在pom里这样设置


    
        
            src/main/resources
            true
        
    

即开启资源过滤。

在maven进行资源处理时,自动将 src/main/resources 目录中所有文件中出现的 ${datasource.url} 替换为 jdbc:mysql://192.168.0.1:3306/test


问题又来了。

不同环境(开发、测试、正式)用的 都不一样,难道每次切换环境都得修改,要是这样的话,用maven资源过滤还有啥用。

maven说:你可以把像 datasource.url 这样与环境相关的属性都放到 profile 里,不同的环境各自拥有一个自己的profile。平时使用的时候设置一个默认的profile,在需要的时候使用mvn参数来切换环境。这些与环境相关的属性的用法和一般的属性完全一样。
如下:


    
        dev
        
            dev
        
        
            true
        
    
    
        test
        
            test
        
    
    
        prod
        
            prod
        
    

这里可以把每一个profile 都看做一个环境。

mvn clean package -P prod 命令后的prod 就表示使用idprod的profile。


还有一个问题,在application.yml 里为什么是 @xxx@ ,而不是 ${xxx}
因为 ${xxx} 这种形式被 springboot 占用了。比如

name: zhangsan
decription: "This is ${name}'s project"


说这些应该就可以了吧

你可能感兴趣的:(【SpringBoot学习】05. 多环境配置)