实现Springboot的多环境配置方式有几种
这里我列出我所了解的两种方式:
一、不需要打包(即使用mvn clean package),直接运行项目就以哪种配置文件运行的方式
(1)新建三个配置文件
三个配置文件解释:
注意:这里为了简单起见,三个文件中我都只是设置了不同的端口号
a)application.properties,是默认的配置文件,如果在这里面不配置spring.profiles.active这个属性的话,项目默认会以这个配置文件来运行。
b)application-dev.properties,这个是开发环境的配置文件。
c)application-pro.properties,这个是生产环境的配置文件。
贴一个默认的application.properties
现在重点来了
如果要以开发环境的配置为基础来运行项目,则只需要在application.properties中添加一句:
spring.profiles.active=dev
那么运行项目的时候就是加载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包就可以启动项目了。
可以看到只存在两个配置文件,若只需要application.properties文件,那么在maven终端直接直接打包就可以,比如:mvn clean package,就只会打包 application.properties这一个文件。如图