Spring Boot 两种方式配置不同的开发环境(开发、测试、生产)

今天新搭了一个项目,趁此机会,把springboot项目启动不同配置的环境(开发、测试、生产)复习一下,,总结两种方法,两种方法大同小异,其实也差不多。

第一种:

1.1.1、新增四个配置文件

 

application.yml是默认加载的,只需要把spring.profiles.active: 指向你需要的yml,就可以启动你想要启动的配置文件。

1.2.1、修改application.yml

在上面基础上,可以更灵活一点,就是读pom,
那上面得做如下的修改:

 

 

1.2.2、修改pom

然后修改pom,如下:

<profiles>
        <profile>
            <id>dev</id>
            <properties>
                <!-- 环境标识,需要与配置文件的名称相对应 -->
                <activatedProperties>dev</activatedProperties>
            </properties>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <activatedProperties>test</activatedProperties>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <activatedProperties>prod</activatedProperties>
            </properties>
            <activation>
                <!-- 默认环境 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

    <build>
        <resources>
            <resource>
                <!--配置文件路径  -->
                <directory>src/main/resources</directory> <!--这里对应项目存放配置文件的目录-->
                <!--开启filtering功能 必须加上,不然yml无法识别@符  -->
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.0.RELEASE</version>
            </plugin>
        </plugins>
    </build>

其中,pom里面的 activatedProperties 对应的就是application.yml里面的 @activatedProperties@

 

 

1.2.3、配置activeByDefault参数

 

 

只需要把这三行代码放到你想启动的环境下面就可以了。

避坑一:不能识别符号@,在步骤中配置的@activatedProperties@,启动会报异常,不能识别@符号。解决方法:

在pom.xml中设置filtering为true

<filtering>true</filtering>

 

第二种:

原理和第一种大同小异。相对来说更简单一点。 名字可以一样,包的位置不同

2.1.2、修改pom文件

<profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profiles.active>dev</profiles.active>
            </properties>
            <!-- 是否默认 true表示默认-->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profiles.active>test</profiles.active>
            </properties>
        </profile>
        <profile>
            <!-- 生产环境 -->
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
            </properties>
        </profile>
    </profiles>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources/config</directory>
                <!-- 资源根目录排除各环境的配置,防止在生成目录中多余其它目录 -->
                <excludes>
                    <exclude>test/*</exclude>
                    <exclude>prod/*</exclude>
                    <exclude>dev/*</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources/config/${profiles.active}</directory>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

 

最后一步和方法一样,只需要把

<!-- 是否默认 true表示默认-->
<activation>
    <activeByDefault>true</activeByDefault>
</activation>

放到不同的位置就好了。

 

这样就ok了!

个人感觉项目本地启动的时候才会涉及到上面的问题,如果项目发布到服务器上面,那么重要的就不是启动了,而是打包了,如何打自己想要的包(测试、开发环境),只需要一条命令就可以了

 

-Pdev 或者 -Pprod指向一下就可以了。

避坑二:我开始在【datasource】下面配置【profiles】,spring已启动就报错:后来把【profiles】配置上移到Spring第一个配置就不报错了。很奇怪

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
  
  profiles:
    active: develop  #需要使用的配置文件的后缀

 

END!!!

posted @ 2023-03-20 16:24  古语云  阅读(1322)  评论(0编辑  收藏  举报