【Spring Boot】多环境配置

2019-05-20  本文已影响0人  嘻洋洋

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 的<Profiles>标签管理。每个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配置文件会覆盖默认文件下的属性。激活方式:

spring.profiles.active=dev
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配置方式存在两点不足:

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

<!-- Maven控制Spring Profile -->
//Maven的Profile配置了两个:dev和prod
<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
//profileActive:申明的属性,此处对应Spring的Profile值
            <profileActive>dev</profileActive>
        </properties>
//dev中使用了内嵌Tomcat,而 prod 中没有
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
    </profile>
</profiles>

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

<!-- profile对资源的操作 -->
<resources>
//去掉src/main/resources下的所有application.properties文件
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>application*.properties</exclude>
        </excludes>
    </resource>
//添加了application.properties默认配置文件和由profileActive属性决定的相应profile配置文件。
    <resource>
        <directory>src/main/resources</directory>
        <!-- 是否替换@xx@表示的maven properties属性值 -->
        <filtering>true</filtering>
        <includes>
            <include>application.properties</include>
            <include>application-${profileActive}.properties</include>
        </includes>
    </resource>
</resources>

(3)Spring配置Profile

spring.profiles.active = @profileActive@

(4)构建
构建命令:

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

4. 知识拓展- yaml语法

(1)语法要点:

  # mail配置
spring:
  mail:
    host: smtp.test.cn
    port: 25
    username:test@test.cn
    password: 1234
    properties:
      mail.smtp.auth: true
      mail.smtp.starttls.enable: true
      mail.smtp.starttls.required: true
//获取值
@Value("${spring.mail.username}")
private String from;
上一篇 下一篇

猜你喜欢

热点阅读