• 【配置】如何在打包Spring Boot项目时按需使用日常、测试、预发、正式环境的配置文件


    前言

    在我们开发项目的时候,一般有四套环境:日常、测试、预发、正式。日常环境作为我们开发环境;测试环境给测试同学测试功能;预发环境给正式环境发布时提供准备;正式环境则是稳定的生产环境。

    这四套环境,数据库、中间件以及其他一些配置多多少少都有一些不同,所以如果我们只用一个application配置文件的话肯定是有问题的,一般的做法是准备4个配置文件,用来区分4个环境,每个文件填入的配置内容互不干扰,然后在项目打包的时候指定文件即可。
    如下图:
    在这里插入图片描述

    具体做法

    1. 创建5个配置文件

    这5个配置文件分别为:

    application.properties
    application-daily.properties
    application-test.properties
    application-pre.properties
    application-publish.properties
    
    • 1
    • 2
    • 3
    • 4
    • 5

    项目结构如下:
    在这里插入图片描述

    这里可能有同学有疑惑,既然有了4个环境的配置文件,为啥还要有application.properties这个文件?
    这里的application.properties我们可以当做是一个配置文件容器,它可以将其他配置文件的内容加到这里来。还有一个原因就是因为SpringBoot项目启动的时候只认识application.properties文件,不认识其他四个。

    2. 在pom.xml文件中如下配置

    
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.7.5version>
            <relativePath/> 
        parent>
        <groupId>com.examplegroupId>
        <artifactId>SpringBoot-configartifactId>
        <version>0.0.1-SNAPSHOTversion>
        <name>SpringBoot-configname>
        <description>Demo project for Spring Bootdescription>
        <properties>
            <java.version>1.8java.version>
        properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
        dependencies>
    
        
        <profiles>
            <profile>
                <id>dailyid>
                <activation>
                    <activeByDefault>trueactiveByDefault>
                activation>
                <properties>
                    <environment>dailyenvironment>
                properties>
            profile>
            <profile>
                <id>testid>
                <properties>
                    <environment>testenvironment>
                properties>
            profile>
            <profile>
                <id>preid>
                <properties>
                    <environment>preenvironment>
                properties>
            profile>
            <profile>
                <id>publishid>
                <properties>
                    <environment>publishenvironment>
                properties>
            profile>
        profiles>
    
        
        <build>
            <finalName>springbootconfigfinalName>
            <resources>
                <resource>
                    
                    <directory>src/main/resourcesdirectory>
                    <includes>
                        <include>application.propertiesinclude>
                        <include>application-${environment}.propertiesinclude>
                    includes>
                    <filtering>truefiltering>
                resource>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <includes>
                        <include>logback.xmlinclude>
                    includes>
                    <filtering>falsefiltering>
                resource>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <filtering>falsefiltering>
                    <excludes>
                        <exclude>*.xmlexclude>
                        <exclude>*.propertiesexclude>
                    excludes>
                resource>
            resources>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                    <version>2.1.13.RELEASEversion>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackagegoal>
                            goals>
                        execution>
                    executions>
                    <configuration>
                        <mainClass>com.example.springbootconfig.SpringBootConfigApplicationmainClass>
                    configuration>
                plugin>
                
                <plugin>
                    <artifactId>maven-antrun-pluginartifactId>
                    <executions>
                        <execution>
                            <phase>packagephase>
                            <configuration>
                                <tasks>
                                    <unzip
                                            src="${project.build.directory}/${project.build.finalName}.${project.packaging}"
                                            dest="${project.build.directory}/springbootconfig"/>
                                tasks>
                            configuration>
                            <goals>
                                <goal>rungoal>
                            goals>
                        execution>
                    executions>
                plugin>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
            plugins>
    
        build>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134

    这里我的配置有3个部分,直接复制我这个文件的同学要注意了。
    第一部分

    
        <profiles>
            <profile>
                <id>dailyid>
                <activation>
                    <activeByDefault>trueactiveByDefault>
                activation>
                <properties>
                    <environment>dailyenvironment>
                properties>
            profile>
            <profile>
                <id>testid>
                <properties>
                    <environment>testenvironment>
                properties>
            profile>
            <profile>
                <id>preid>
                <properties>
                    <environment>preenvironment>
                properties>
            profile>
            <profile>
                <id>publishid>
                <properties>
                    <environment>publishenvironment>
                properties>
            profile>
        profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    这个部分可以直接复制。这里设置environment变量,它的值一共有4个即daily、test、pre、publish,通过activeByDefault标签设置daily为默认配置。

    第二部分

    <resources>
        <resource>
            
            <directory>src/main/resourcesdirectory>
            <includes>
                <include>application.propertiesinclude>
                <include>application-${environment}.propertiesinclude>
            includes>
            <filtering>truefiltering>
        resource>
        <resource>
            <directory>src/main/resourcesdirectory>
            <includes>
                <include>logback.xmlinclude>
            includes>
            <filtering>falsefiltering>
        resource>
        <resource>
            <directory>src/main/resourcesdirectory>
            <filtering>falsefiltering>
            <excludes>
                <exclude>*.xmlexclude>
                <exclude>*.propertiesexclude>
            excludes>
        resource>
    resources>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    这个部分也可以直接复制。这里配置是指定打包那些类型的文件,有时候我们会遇到这样一个问题,发现有些文件不管怎么打包都没法打到jar包里面去,其实就是这个地方没有配置,默认给过滤掉了。

    第三部分

    <plugins>
        <plugin>
            <groupId>org.apache.maven.pluginsgroupId>
            <artifactId>maven-compiler-pluginartifactId>
            <version>3.8.1version>
            <configuration>
                <source>1.8source>
                <target>1.8target>
                <encoding>utf-8encoding>
            configuration>
        plugin>
        <plugin>
            <groupId>org.apache.maven.pluginsgroupId>
            <artifactId>maven-source-pluginartifactId>
            <version>2.2version>
            <executions>
                <execution>
                    <id>attach-sourcesid>
                    <goals>
                        <goal>jargoal>
                    goals>
                execution>
            executions>
            <configuration>
                <finalName>${project.build.finalName}finalName>
            configuration>
        plugin>
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
            <version>2.1.13.RELEASEversion>
            <executions>
                <execution>
                    <goals>
                        <goal>repackagegoal>
                    goals>
                execution>
            executions>
            <configuration>
                <mainClass>com.example.springbootconfig.SpringBootConfigApplicationmainClass>
            configuration>
        plugin>
    plugins>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    这个部分要注意后面的mainClass,这里要写你们自己的类路径,不要搞错了。这里指定了打包和解压的插件和文件路径,还有启动类。这里的插件一个都不能少且路径不要配置错误,否则有可能会出现打包失败或者启动时找不到启动类

    3. 在application.properties中加入环境变量

    application.properties文件中有一个配置:spring.profiles.active。指定它就可以指定当前运行的环境,配置如下:

    spring.application.name=SpringBoot-config
    server.port=8080
    management.server.port=8081
    spring.mvc.view.prefix=/
    spring.mvc.view.suffix=.html
    
    #通过配置的方式激活环境
    spring.profiles.active=@environment@ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果这个时候你是使用的是idea开发工具,那么在右侧的maven插件中就已经可以看到这几个环境了:
    在这里插入图片描述

    当然没有idea开发工具的同学也不用担心,我们接下来直接使用打包指令就可以了

    日常环境打包指令
    mvn clean package -Dmaven.test.skip=true -P=daily

    测试环境打包指令
    mvn clean package -Dmaven.test.skip=true -P=test

    预发环境打包指令
    mvn clean package -Dmaven.test.skip=true -P=pre

    正式环境打包指令
    mvn clean package -Dmaven.test.skip=true -P=publish

    打包出来的文件如下:
    在这里插入图片描述

    这里就会出现你想要指定环境的配置文件,application.properties中的environment变量也会被替换为

    pring.application.name=SpringBoot-config
    server.port=8080
    management.server.port=8081
    spring.mvc.view.prefix=/
    spring.mvc.view.suffix=.html
    
    #环境激活
    spring.profiles.active=publish 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    当然,平时调试的时候使用默认的日常环境配置就可以了,打包的时候再去指定具体的环境即可。

  • 相关阅读:
    【kubernetes】关于k8s集群中的ingress规则案例
    Verilog HDL 语法整理 (五)
    怎么批量把图片格式转为jpg?
    汇编语言关于程序的模块化编写
    无锡设计培训:PLC控制的基本原则
    js基本类型和引用类型
    零基础非计算机专业转行软件测试可行吗?
    算法day39|62,63
    【无标题】
    Java设计模式 _行为型模式_观察者模式
  • 原文地址:https://blog.csdn.net/u011397981/article/details/134276933