Profile 这个概念在 Spring Boot 中被用来对应用的配置信息进行分类。可分类的配置信息包括: Bean 的定义,配置文件中的配置信息等。在开发中,我们既可以在代码中通过注解来使用它,也可以在xml文件中使用它。
本文使用在 Spring Boot 构建Rest服务实验手册(一) 中使用的案例。如果不熟悉的 Spring Boot 的开发,可以先参考该实验手册。
为不同环境定义不同配置信息
在应用开发中,各阶段使用的配置信息往往是不同的,包括端口,数据源等。为了避免在发布到不同环境时修改配置信息的重复劳动和可能引起的错误。可以将配置信息分别写在不同的 profile 配置文件中。比如,示例程序在开发和生产环境的端口和数据源信息不同,我们就可以在原有 application.yml 配置文件的基础上增加如下的文件:
- application-dev.yml – 针对开发环境
- application-prod.yml == 针对生产环境
然后在原 application.yml 保留在各环境相同的配置信息,将不同的信息放到对应环境的配置文件中去。 修改后的配置文件如下:
- application.yml
1 | spring: |
在该文件中,指定了当前激活的 profiel 是 dev
application-dev.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19server:
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-dropapplication-prod.yml
1 | server: |
用注释指定配置信息
比如在我们只想在开发环境中使用 Swagger 来生成对应的Api文档,则可以在 SwaggerConfig 类的定义中加入注解:
1 | "dev") ( |
这样该类就只在开发环境起作用了。
在启动参数中指定Profile
在启动应用时,可以通过指定 JVM 的参数来指定当前环境中使用的 Profile, 如:
1 | -Dspring.profiles.active=prod |
注意:该参数将覆盖在 application.yml 中指定的 profile.active