在 Spring Boot 中使用 Profile

Profile 这个概念在 Spring Boot 中被用来对应用的配置信息进行分类。可分类的配置信息包括: Bean 的定义,配置文件中的配置信息等。在开发中,我们既可以在代码中通过注解来使用它,也可以在xml文件中使用它。

本文使用在 Spring Boot 构建Rest服务实验手册(一) 中使用的案例。如果不熟悉的 Spring Boot 的开发,可以先参考该实验手册。

为不同环境定义不同配置信息

在应用开发中,各阶段使用的配置信息往往是不同的,包括端口,数据源等。为了避免在发布到不同环境时修改配置信息的重复劳动和可能引起的错误。可以将配置信息分别写在不同的 profile 配置文件中。比如,示例程序在开发和生产环境的端口和数据源信息不同,我们就可以在原有 application.yml 配置文件的基础上增加如下的文件:

  1. application-dev.yml – 针对开发环境
  2. application-prod.yml == 针对生产环境

然后在原 application.yml 保留在各环境相同的配置信息,将不同的信息放到对应环境的配置文件中去。 修改后的配置文件如下:

  1. application.yml
1
2
3
4
5
6
7
8
9
spring:
profiles:
active: dev
h2:
console:
enabled: true
path: /api/h2
settings:
web-allow-others: true

在该文件中,指定了当前激活的 profiel 是 dev

  1. application-dev.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    server:
    port: 8020

    logging:
    level:
    com.example.demo: DEBUG

    spring:
    datasource:
    driverClassName: org.h2.Driver
    url: jdbc:h2:mem:test;MODE=PostgreSQL;DB_CLOSE_ON_EXIT=FALSE
    username: sa
    password:
    jpa:
    database: H2
    generate-ddl: true
    show-sql: true
    hibernate:
    ddl-auto: create-drop
  2. application-prod.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server:
port: 8080

logging:
level:
com.example.demo: ERROR

spring:
datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:./hohistar-con-data
username: sa
password:
jpa:
database: H2
generate-ddl: true
show-sql: true
hibernate:
ddl-auto: create-drop

用注释指定配置信息

比如在我们只想在开发环境中使用 Swagger 来生成对应的Api文档,则可以在 SwaggerConfig 类的定义中加入注解:

1
2
3
4
5
6
7
8
@Profile("dev")
@Configuration
public class SwaggerConfig extends WebMvcConfigurationSupport {

public static final Contact DEFAULT_CONTACT = new Contact(
"Jini", "https://www.mls-tech.info", "mls-tech@qq.com");

...

这样该类就只在开发环境起作用了。

在启动参数中指定Profile

在启动应用时,可以通过指定 JVM 的参数来指定当前环境中使用的 Profile, 如:

1
-Dspring.profiles.active=prod

注意:该参数将覆盖在 application.yml 中指定的 profile.active

本文标题:在 Spring Boot 中使用 Profile

文章作者:晨星

发布时间:2019年12月25日 - 19:12

最后更新:2020年05月28日 - 16:05

原始链接:https://www.mls-tech.info/java/springboot-use-profile/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。