SpringBoot项目配置profiles.active来动态勾选开发环境

摘要简介

SpringBoot是一个非常强大的框架,它集成了好多模块,能够被任意项目的构建系统所使用,内置tomcat,可以打成jar包独立运行,对于我猿来说,这简直就是通往理想大门时空隧道。那么,SpringBoot项目中,对于开发环境、生产环境、测试环境还能够任意切换呢,请看以下博文:

成形预览在这里插入图片描述

开始配置

模块图
在这里插入图片描述

  1. pom.xml由于本demo是多模块架构,此Pom文件是parent级(root)的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>
    <groupId>com.jxt</groupId>
    <artifactId>jxt</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <!--配置jdk版本及文件编码-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <!--声明子模块-->
    <modules>
        <module>jxt-oms</module>
        <module>jxt-services</module>
        <module>jxt-util</module>
    </modules>

    <!--这是Spring Boot的父级依赖,这样当前的项目就是Spring Boot项目了。
    spring-boot-starter-parent 是一个特殊的starter,它用来提供相关的Maven默认依赖。
    使用它之后,常用的包依赖可以省去version标签。
    但是,对于这个元素,有个大坑,详见下文 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/>
    </parent>
    <!--由于我们的模块很多,所以我们又抽象了一层
    通过dependencyManagement元素,来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
    -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.jxt</groupId>
                <artifactId>jxt-oms</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.jxt</groupId>
                <artifactId>jxt-services</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.jxt</groupId>
                <artifactId>jxt-util</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <!--当然,这里面也可以加入其它通用工具的依赖-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.28</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!--设置maven仓库-->
    <repositories>
        <repository>
            <id>jeesite-repos</id>
            <name>Jeesite Repository</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </repository>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>jeesite-repos</id>
            <name>Jeesite Repository</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </pluginRepository>
    </pluginRepositories>
</project>
关于Spring-Boot-starter-parent的特殊说明
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/>
    </parent>

当使用了这个元素后,若需要在propertiesyml文件中读取pom.xml定义的变量,需要用@variable@的方式而不再是${variable},由于${variable}方式会被maven处理。如果你的pom继承了spring-boot-starter-parent,Spring Boot已经将maven-resources-plugins默认的${variable}方式改为了@variable@方式。
2. 子模块(-oms)的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>
    <!--声明继承父模块(即root)模块-->
    <parent>
        <groupId>com.jxt</groupId>
        <artifactId>jxt</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--子模块信息-->
    <artifactId>jxt-oms</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <!--配置jdk版本及文件编码-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.build.outputEncoding>UTF-8</project.build.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <!--            重点                 -->
    <!--  多环境配置节点  -->
    <profiles>
        <!--1. 开发环境-->
        <profile>
            <id>dev</id>
            <!-- 默认激活开发环境 -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!--profiles.active节点名称,可自定义名称,只要和properties中取的变量名一致即可-->
                <profiles.active>dev</profiles.active>
                <!--log文件的路径-->
                <profiles.logFile>${project.basedir}/logs/jxt/jxt-oms.log</profiles.logFile>
            </properties>
        </profile>
        <!--2. 测试环境-->
        <profile>
            <id>test</id>
            <properties>
                <profiles.active>test</profiles.active>
                <profiles.logFile>/home/jxt/logs/jxt/jxt-oms.log</profiles.logFile>
            </properties>
        </profile>
        <!--3. 生产环境-->
        <profile>
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
                <profiles.logFile>/home/jxt/logs/jxt/jxt-oms.log</profiles.logFile>
            </properties>
        </profile>
    </profiles>
    <!--其它依赖组件-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!--阿里巴巴数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.28</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <!--swagger接口文档生成器配置-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.caspar-chen</groupId>
            <artifactId>swagger-ui-layer</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>21.0</version>
        </dependency>
        <dependency>
            <groupId>io.github.swagger2markup</groupId>
            <artifactId>swagger2markup</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj-pdf</artifactId>
            <version>1.5.0-alpha.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj</artifactId>
            <version>1.5.7</version>
        </dependency>
    </dependencies>
    <build>
        <!--配置文件-->
        <resources>
            <resource>
                <!--配置文件的路径-->
                <directory>src/main/resources</directory>
                <!-- Maven的资源过滤功能可以实现在构建时,
                修改<includes>中的文件以“@xxx@”表示的属性,此处是关键-->
                <filtering>true</filtering>
                <!--指定配置文件类型-->
                <includes>
                    <include>application.properties</include>
                    <!--${profiles.active}即为当前激活的配置文件-->
                    <include>application-${profiles.active}.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.setting</include>
                    <include>**/*.p12</include>
                </includes>
            </resource>
        </resources>
        <!--插件-->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <!-- 过滤后缀为pem、pfx的证书文件 -->
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>pem</nonFilteredFileExtension>
                        <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
                        <nonFilteredFileExtension>p12</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
            <!--若使用了swagger,以下是PDF和HTML文档生成器的插件配置-->
            <plugin>
                <groupId>org.asciidoctor</groupId>
                <artifactId>asciidoctor-maven-plugin</artifactId>
                <version>1.5.7.1</version>
                <!-- Include Asciidoctor PDF for pdf generation -->
                <dependencies>
                    <dependency>
                        <groupId>org.asciidoctor</groupId>
                        <artifactId>asciidoctorj-pdf</artifactId>
                        <version>1.5.0-alpha.10.1</version>
                    </dependency>
                    <dependency>
                        <groupId>org.jruby</groupId>
                        <artifactId>jruby-complete</artifactId>
                        <version>9.1.17.0</version>
                    </dependency>
                </dependencies>
                <!-- 通用文档生成器配置 -->
                <configuration>
                    <sourceDirectory>D:\docs\markdown\generated</sourceDirectory>
                    <sourceHighlighter>coderay</sourceHighlighter>
                    <attributes>
                        <toc>left</toc>
                    </attributes>
                </configuration>
                <executions>
                    <execution>
                        <id>output-html</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>process-asciidoc</goal>
                        </goals>
                        <configuration>
                            <backend>html5</backend>
                            <outputDirectory>D:\docs\markdown\generated\html</outputDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>output-pdf</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>process-asciidoc</goal>
                        </goals>
                        <configuration>
                            <backend>pdf</backend>
                            <outputDirectory>D:\docs\markdown\generated\pdf</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>io.github.swagger2markup</groupId>
                <artifactId>swagger2markup-maven-plugin</artifactId>
                <version>1.3.1</version>
                <configuration>
                    <!--此处端口一定要是当前项目启动所用的端口-->
                    <swaggerInput>http://localhost:8087/v2/api-docs</swaggerInput>
                    <outputDir>D:\docs\markdown\generated</outputDir>
                    <config>
                        <!-- 除了ASCIIDOC之外,还有MARKDOWN和CONFLUENCE_MARKUP可选 -->
                        <swagger2markup.markupLanguage>ASCIIDOC</swagger2markup.markupLanguage>
                    </config>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3.子模块(-service)的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>
    <!--声明继承父模块(即root)模块-->
    <parent>
        <groupId>com.jxt</groupId>
        <artifactId>jxt</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--子模块信息-->
    <groupId>com.example</groupId>
    <artifactId>jxt-services</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <!--配置jdk版本及文件编码-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.build.outputEncoding>UTF-8</project.build.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <!--其它依赖组件-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--swagger注解-->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.20</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- mybatis 生成插件配置,可根据数据库逆向生成实体类及mapper -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <!--mybatis生成的文件存放路径-->
                    <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.46</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.0.0</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
  1. 子模块(-util)的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>
    <!--声明继承父模块(即root)模块-->
    <parent>
        <groupId>com.jxt</groupId>
        <artifactId>jxt</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--子模块信息-->
    <artifactId>jxt-util</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <!--配置jdk版本及文件编码-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.build.outputEncoding>UTF-8</project.build.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
  1. application.properties文件
#指定环境,Maven构建时,@profiles.active@ 会被替换为Maven指定的profiles.active
[email protected]@

注,此处的@profiles.active@pom.xml中定义的variable一致,当pom继承了spring-boot-starter-parent,Spring Boot已经将maven-resources-plugins默认的${variable}方式改为了@variable@方式。

  1. 开发环境application-dev.properties
server.address=192.168.124.14
server.port=8087
server.servlet.context-path=/jxt
  1. 测试环境application-test.properties
server.address=192.168.124.14
server.port=8086
server.servlet.context-path=/test
  1. 生产环境 application-prod.properties
server.address=192.168.124.14
server.port=8085
server.servlet.context-path=/prod

以上配置完成后,展开maven,如下:
在这里插入图片描述
会多出一项ProFiles选项,这是由于在pom.xml中加入了profiles节点,现在就可以随意勾选想要的环境,启动即可,SpringBoot会根据所勾选的环境自动加载不同环境下的配置文件。



以上均为作者原创,若有说明不当,欢迎新老司机前来指正。
发布了5 篇原创文章 · 获赞 3 · 访问量 471

猜你喜欢

转载自blog.csdn.net/mr_wang9992/article/details/88928177