springboot系列:springboot项目在多环境下配置

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/m0_37822490/article/details/89511904

springboot系列:springboot项目在多环境下配置

任何一种技术的出现,都是来解决特定的问题的!

问题场景:

  在一个项目中总会有不同的环境,开发环境、测试环境、生产环境、各个服务器的部署环境,不同的环境会有不同的配置,比如数据库的配置就不同、redis的配置就不同等,现在需要做到:不用每次换环境的时候,都去修改这些配置。

本人知道的解决方案方式有三种:

  1. 修改配置文件
  2. 命令启动服务,命令中带有环境的参数
  3. 第一种的优化版(常用)

解决方式:

方式一:修改配置文件

修改配置文件方式

  这样,springboot项目在启动服务的时候会有先读取application.properties里面的内容,当读取到spring.profiles.active时,会调取对应的参数后面的值的application_xx.properties,上图中,启动服务时,会调取application_local.properties文件,对应不同的环境,配置不同的文件,例如:application_dev.propertiesapplication_test.properties

方式二:命令启动服务,命令中带有环境的参数

注意:该方式可以没有application.properties文件

  1. cmd进入到项目的目录下,进行maven打包,执行命令:mav install,会在target目录下生成项目的jar包。
  2. 进入target目录,执行命令:java -jar 生成的jar包 --spring.profiles.active=local

  项目会调用application_dev.properties的配置文件。同理,若是测试环境,只需将local该成test

方式三:第一种的优化版(常用)

  application.properties中填写[email protected]@,这里的@profiles.active@是一个变量对应pom文件里的环境配置。

pox.xml的配置文件

 <profiles>
    <profile>
        <!-- 本地开发环境(默认使用) -->
        <id>local</id>
        <properties>
            <profiles.active>local</profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <!-- 开发环境 -->
        <id>beta</id>
        <properties>
            <profiles.active>beta</profiles.active>
        </properties>
    </profile>
    <profile>
        <!-- 测试环境 -->
        <id>test</id>
        <properties>
            <profiles.active>test</profiles.active>
        </properties>
    </profile>
    <profile>
        <!-- stg环境 -->
        <id>stg</id>
        <properties>
            <profiles.active>stg</profiles.active>
        </properties>
    </profile>
    <profile>
        <!-- 生产环境 -->
        <id>prod</id>
        <properties>
            <profiles.active>prod</profiles.active>
        </properties>
    </profile>
</profiles>

  在pom文件里分别配置好不同环境的文件名称。

注意:
<profiles.active>local</profiles.active>中的local与配置文件名称application-> local.properties要一致。
profiles.active名称对应application.properties配置文件中的[email protected]@。

  当maven打包时会用pom文件里 <profiles.active>local</profiles.active> 中的值替换掉application.properties配置文件中的@profiles.actives@。

  maven打包

    <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>config/application.properties</exclude>
                <exclude>config/application-local.properties</exclude>
                <exclude>config/application-beta.properties</exclude>
                <exclude>config/application-test.properties</exclude>
                <exclude>config/application-stg.properties</exclude>
                <exclude>config/application-prod.properties</exclude>
            </excludes>
        </resource>
        <resource> 
			<!-- 配置需要被替换的资源文件路径 -->
            <directory>src/main/resources</directory>
            <includes>
                <include>config/application-${profiles.active}.properties</include>
                <include>config/application.properties</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>lib</directory>
            <targetPath>BOOT-INF/lib/</targetPath>
            <includes>
                <include>**/*.jar</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <finalName>${project.name}</finalName>
                <mainClass>com.xxxx.Application</mainClass>
                <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                <includeSystemScope>true</includeSystemScope>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArguments>
                    <extdirs>${pom.basedir}/lib</extdirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok-maven-plugin</artifactId>
            <version>1.18.0.0</version>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <finalName>${project.name}</finalName>
                <!-- not append assembly id in release file name -->
                <appendAssemblyId>false</appendAssemblyId>
                <descriptors>
                    <descriptor>src/main/assembly/assembly.xml</descriptor>
                </descriptors>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

  配置完成,使用maven命令进行打包,mvn clean package -P local,target会生成jar包。

以上项目是本人项目中使用的配置,请根据配置进行更改。

springboot系列尚未完成,后续会一点补充

spring boot系列:1.spring boot项目在多环境下的配置

猜你喜欢

转载自blog.csdn.net/m0_37822490/article/details/89511904