实现Springboot的多环境配置方式有几种

这里我列出我所了解的两种方式:

一、不需要打包(即使用mvn clean package),直接运行项目就以哪种配置文件运行的方式

(1)新建三个配置文件

springboot支持多环境配置文件 spring boot多环境运行_配置文件


三个配置文件解释:

注意:这里为了简单起见,三个文件中我都只是设置了不同的端口号

a)application.properties,是默认的配置文件,如果在这里面不配置spring.profiles.active这个属性的话,项目默认会以这个配置文件来运行。

b)application-dev.properties,这个是开发环境的配置文件。

c)application-pro.properties,这个是生产环境的配置文件。

贴一个默认的application.properties

springboot支持多环境配置文件 spring boot多环境运行_多环境配置_02


现在重点来了

如果要以开发环境的配置为基础来运行项目,则只需要在application.properties中添加一句:

spring.profiles.active=dev

springboot支持多环境配置文件 spring boot多环境运行_spring_03


那么运行项目的时候就是加载application-dev.properties文件中的内容了,

如果application-dev.properties和application.properties有相同的属性,那么前者会覆盖后者的属性。

这就实现了springboot的多环境配置的第一种方式,基于application.properties

二、需要打包(即使用mvn clean package)的这种方式,这种方式是基于maven来完成的多环境配置

同理也是建立三个配置文件,和上面类似。
然后在pom.xml文件中

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
    <groupId>com.dubbo.xf</groupId>
    <artifactId>consumer</artifactId>
    <version>1.0-SNAPSHOT</version>



    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.dubbo.xf</groupId>
            <artifactId>exa-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-client</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>
    </dependencies>

    <!-- 配置多环境的文件 -->
    <profiles>
        <profile>
            <!--默认环境,就是执行application.properties -->
            <id>default</id>
            <!-- 默认启动这个配置文件-->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <active.profile></active.profile>
            </properties>
        </profile>
        <profile>
            <!--默认环境,就是执行application-dev.properties -->
            <id>dev</id>
            <properties>
                <active.profile>dev</active.profile>
            </properties>
        </profile>
        <profile>
            <!--默认环境,就是执行application-pro.properties -->
            <id>pro</id>
            <properties>
                <active.profile>pro</active.profile>
            </properties>
        </profile>
    </profiles>

    <build>
        <!-- 配置资源文件 -->
        <resources>
            <resource>
                <!-- 是否使用真正的值替换占位符,比如配置文件中有${key},然后用指向的值将其替换}-->
                <filtering>true</filtering>
                <directory>${basedir}/src/main/resources/</directory>
                <!-- 打包的时候最少包含一个文件application.properties -->
                <includes>
                    <include>application.properties</include>
                    <include>application-${active.profile}.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources/</directory>
                <!-- 打包的时候不打包application*.properties这种文件 -->
                <excludes>
                    <exclude>application*.properties</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
            </plugin>
        </plugins>
    </build>
</project>

上面pom.xml文件中需要解释的是(依赖可以不用看,没有使用)

1.<profiles>这个标签下面包含的就是多环境配置的东西,每一个对应一个配置文件。

2.<resources>这个标签对应的是打包的时候需要打包那些资源文件。

这两个是必须要配置的。

<resources>中有一点要搞清楚。

为什么第一个<resource>中使用<includes>包含了两个配置文件要打包,而第二个<resource>中使用<excludes>又将所有类似于application*.properties的配置文件不进行打包?

这是因为第一个<resource>中是指定要打包哪些配置文件,如果不指定的话,那么所有的配置文件都会被打包下来,这很明显是没有必要的。

而第二个<resource>就是指明所有的配置文件都不需要打包,如果要打包的话,就只打包第一个<resource>中指定的配置文件。

如上配置完成之后,然后在mvn终端输入如下命令:

mvn clean package -P 指定配置文件

比如mvn clean package -P dev

那么在你的target目录下就只会看到两个配置文件application.properties和

application-deiv.properties,之后运行jar包就可以启动项目了。

springboot支持多环境配置文件 spring boot多环境运行_配置文件_04


可以看到只存在两个配置文件,若只需要application.properties文件,那么在maven终端直接直接打包就可以,比如:mvn clean package,就只会打包 application.properties这一个文件。如图

springboot支持多环境配置文件 spring boot多环境运行_springboot支持多环境配置文件_05