springboot 区分不一样环境配置

通常来讲,项目开发分为开发环境(dev)测试环境(test)预生产环境(pre)生产环境(prod)。不一样环境之间的配置存在必定的差别,咱们须要根据不一样的部署环境切换配置文件,下面来讲一下如何区分不一样环境进行配置。java

配置文件准备

准备下图对应的application-*.properties文件。spring

  • application.properties: 公共配置
  • application-dev.properties: 开发环境配置
  • application-test.properties: 测试环境配置
  • application-prod.properties: 生产环境配置

image.png

pom.xml配置

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.yml</include>
            <include>**/*.xml</include>
        </includes>
        <!-- 是否替换@xx@表示的maven properties属性值 -->
        <filtering>true</filtering>
    </resource>
</resources>

application.properties

# 此时配置为开发环境
spring.profiles.active=dev

# 此时配置为测试环境
spring.profiles.active=test

# 此时配置为生产环境
spring.profiles.active=prod

上面的配置须要咱们在不一样环境的时候修改对应的值,这样来讲很是的不方便,此时咱们能够经过变量的方式进行配置,下面咱们进行修改。springboot

pom.xml中添加app

<profiles>
    <!--开发环境-->
 <profile>
        <id>dev</id>
        <properties>
            <env>dev</env>
        </properties>
    </profile>
    <!--测试环境-->
 <profile>
        <id>test</id>
        <properties>
            <env>test</env>
        </properties>
    </profile>
    <!--生产环境-->
 <profile>
        <id>prod</id>
        <properties>
            <env>prod</env>
        </properties>
    </profile>
</profiles>

application.properties修改成maven

# 此时经过env来区分不一样环境
spring.profiles.active=@env@

这时咱们在IDEA右侧看到以下:spring-boot

在这里咱们能够选择对应的环境测试

image.png

此时咱们已经能够经过切换Profiles来切换环境了。可是这种状况下只能经过运行启动类的方式进行启动,像这样:spa

image.png

这样的话才能够应用到Profiles选中的值。code

spring-boot:run方式启动xml

此时不能应用到IDEA右侧选中的Profiles的环境值。


  • mvn spring-boot:run -P dev

咱们须要在命令后添加指定的环境,像这样:mvn spring-boot:run -P dev指定以dev的环境进行启动,其中-P指定pom.xml中对应的profiles的值。此时application.properties配置文件再也不生效。


springboot1.x启动

  • mvn spring-boot:run -Drun.profiles=dev

springboot2.x启动

  • mvn spring-boot:run -Dspring-boot.run.profiles=test

运行jar包

java -jar -Dspring.profiles.active=test demo.jar

# 或者

java -jar --spring.profiles.active=test demo.jar