springboot maven profiles 打包不通环境
在Spring Boot项目下的application.yml或application.properties中添加配置项
application.yml
spring:
profiles:
active: dev
application.properties
spring.profiles.active: dev
spring.profiles.active: dev
表示默认加载的就是开发环境的配置,如果dev换成test,则会加载测试环境的属性,以此类推。
-
创建不同环境下的配置文件
例如环境分为开发环境、测试环境和生产环境,创建如下文件:
- 开发环境 :
application-dev.yml
或application-dev.properties
- 测试环境:
application-test.yml
或application-test.properties
- 生产环境:
application-prod.yml
或application-prod.properties
- 开发环境 :
application.yml文件分为四部分,使用 --- 来作为分隔符,第一部分通用配置部分,表示三个环境都通用的属性,用spring.profiles指定了一个值(开发为dev,测试为test,生产为prod),这个值表示该段配置应该用在哪个profile里面。
例如, 我们在某个项目中根据不同的环境配置不同的数据库信息:
-
开发环境
spring: datasource: name: druidDataSource type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.1.2:3306/myDB?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false username: user1 password: 123456
-
测试环境
spring: datasource: name: druidDataSource type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.20.2:3306/myTestDB?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false username: user1 password: 123456
-
生产环境
spring: datasource: name: druidDataSource type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://172.1.16.2:3306/myProdDB?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false username: prod1 password: prod1234!@#
-
对应用进行打包操作后, 启动应用
如果是部署到服务器的话,我们正常打成jar包,启动应用时Spring Boot通过application.yml或applcation.properties文件中的
spring.profiles.active
配置项加载相关环境的配置信息。除此之外, 我们可以通过--spring.profiles.active=xxx
来控制加载哪个环境的配置,参考命令如下:# 表示使用开发环境的配置 java -jar xxx.jar --spring.profiles.active=dev # 表示使用测试环境的配置 java -jar xxx.jar --spring.profiles.active=test # 表示使用生产环境的配置 java -jar xxx.jar --spring.profiles.active=prod
-
添加扩展的配置文件信息
在复杂项目中,我们有可能需要添加一些额外的扩展配置信息, Spring Boot支持项目添加扩展的配置文件, 假设我们在某个功能模块
hurricane-ldap
中配置需要进行LDAP认证的配置文件application-ldap.yml
,我们可以在application.yml或application.properties文件中修改spring.profiles.active
配置项, 如下所示:spring: profiles: active: dev,ldap
通过Mavan实现多环境配置打包
-
在pom.xml文件中添加多环境配置
<!-- Application Environment Setting --> <profiles> <profile> <id>dev</id> <activation> <!-- Default Active Without Assign Parameter --> <activeByDefault>true</activeByDefault> </activation> <properties> <profileActive>dev</profileActive> </properties> </profile> <profile> <id>test</id> <properties> <profileActive>test</profileActive> </properties> </profile> <profile> <id>prod</id> <properties> <profileActive>prod</profileActive> </properties> </profile> </profiles>
注: 配置文件中添加开发、测试和生产三个环境的配置, 其中应注意
profileActive
自定义配置项, 该配置项指明应用配置文件的名称, 此配置项将在application.yml或application.properties中应用。 -
修改applcation.yml或application.properties配置项
修改applcation.yml或application.properties配置项,替换
spring.profies.active
配置项,如下所示:spring: profiles: active: @profileActive@,ldap
注:
@profileActive@
为上一步骤中pom.xml文件配置的自定义配置项, 该参数可以根据开发人员自身的习惯进行命名和配置。 -
使用maven命令打包成相应环境的应用程序包
- 生产环境
mvn clean package -Pprod -U # 或者 mvn clean package -DprofileActive=prod -U
- 测试环境
mvn clean package -Ptest -U # 或者 mvn clean package -DprofileActive=test -U
- 开发环境
mvn clean package -Pdev -U # 或者 mvn clean package -DprofileActive=dev -U
其他的
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<properties>
<build.profile.id>dev</build.profile.id>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<build.profile.id>test</build.profile.id>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<build.profile.id>prod</build.profile.id>
</properties>
</profile>
</profiles>
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources.${build.profile.id}</directory>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>