SpringBoot项目在不同环境下的配置以及打包方式
一、概述
在我们平时的开发中,一个项目因为要上线,会有很多种环境,在不同的环境中我们项目的配置文件往往都是不一样的,比如数据库 ,Redis 的那些配置,那我们怎么设置不用每次都进行修改呢?
由于上面的问题,我们直接配置三个配置文件,只需要打包的时候,根据不同环境打包不同的配置文件就好了,如下图
这三个文件中
application.yml 是启动服务时,Spring会自动加载的配置文件 application-dev.yml 代表的是开发环境时的配置文件 application-prod.yml 代表的是生产环境的配置文件
后面这两个文件在SpringBoot服务启动时,Spring不会自动加载他们,那么在不同的环境中时怎么加载不同的配置文件的呢?
二、配置文件的加载设置
因为在服务启动时,Spring会自动加载application.yml
所以我们只需在这个配置文件中设置,需要哪个就加载哪个就好了
如上图所示,在服务启动加载的时候,服务器就会加载application.yml 文件,然后通过配置去调用application-dev.yml 文件,选择开发环境。当然如此,当active: prod ,那么服务在启动时,Spring 就会调用application-prod.yml 文件进入生产环境。
三、Maven不同环境的打包
首先我们进行动态的调用不同的配置文件,首先我们的前提条件是拥有上述的三个配置文件,然后根据这些文件的名字来进行下列配置,大家根据自己需求进行更改。
然后我们要这样配置我们的 pom.xml
<profiles>
<profile>
<id>dev</id>
<properties>
<activatedEnv>dev</activatedEnv>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedEnv>prod</activatedEnv>
</properties>
</profile>
</profiles>
<build>
<finalName>Test</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>test-resources</id>
<phase>compile</phase>
<goals>
<goal>testResources</goal>
</goals>
<configuration>
<overwrite>true</overwrite>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/${activatedEnv}</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
<inherited>true</inherited>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后在我们的 application.yml 配置动态的使用
spring:
profiles:
active: @activatedEnv@
这里的 @activatedEnv@ ,使用的就是我们在pom.xml 里设置的<activatedEnv> ,当我们需要Maven 打包时,他就会用这里的值来进行使用
然后在Maven打包时,我们只需要指定参数就好了
比如我们需要打包开发环境:
mvn clean package -P dev
打包生产环境
mvn clean package -P prod
我们只需要修改参数就行了!这样就会打包不同的配置文件!
|