java教程 教程 ·

maven profile实现多环境打包

项目开发需要有多个环境,一般为开发,测试,正式等环境,通过maven可以实现按不同环境进行打包部署 。

1、拆分 application.yml 文件

首先我们有一个非常简单的 application.yml 文件 ,该文件里指定所使用的环境和其他的公共参数。

spring:
  profiles:
    active: dev

#如果有其他公共参数可以补充进来

在src/main/resource目录下,再创建yml配置文件存放不同环境的参数 ,命名规则为 application-{profiles}.yml 。

例如:

application-dev.yml

# 开发配置
spring:
    datasource:
        url : jdbc:mysql://127.0.0.1:3306/dev?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
        username : root
        password : mysql

application-prod.yml

#生产配置
spring:
    datasource:
        url : jdbc:mysql://x.x.x.x:3306/prod?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
        username : root
        password : 12345678

2、用Maven控制默认配置

之前,我们将项目打成包后,在运行的时候需要指定配置,略嫌麻烦。这里我们使用maven-resources-plugin插件在打包的时候,自动改变spring.profiles.active的激活配置,这样直接通过java -jar xxx.jar即可运行项目。

在pom.xml添加如下配置

<profiles>
    <!--开发环境-->
    <profile>
        <id>dev</id>
        <properties>
            <spring.profiles.active>dev</spring.profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!--测试环境-->
    <profile>
        <id>test</id>
        <properties>
            <spring.profiles.active>test</spring.profiles.active>
        </properties>
    </profile>
    <!--生产环境-->
    <profile>
        <id>prod</id>
        <properties>
            <spring.profiles.active>prod</spring.profiles.active>
        </properties>
    </profile>
</profiles>

在< build>里添加如下配置

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <executions>
                <execution>
                    <id>default-resources</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/classes</outputDirectory>
                        <useDefaultDelimiters>false</useDefaultDelimiters>
                        <delimiters>
                            <delimiter>#</delimiter>
                        </delimiters>
                        <resources>
                            <resource>
                                <directory>src/main/resources/</directory>
                                <filtering>true</filtering>
                            </resource>
                            <resource>
                                <directory>src/main/resources.${spring.profiles.active}</directory>
                                <filtering>false</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

修改 application.yml 文件

spring:
    profiles:
        active: #spring.profiles.active#

注意看 pom.xml 中的 <delimiter>#</delimiter> 定义了一个占位符,可以在复制文件的时候,在文件中查找 #...# 将其中的内容进行替换。

通过以上两种方法修改后,再次运行 mvn package -P dev 打包,将生成的 Jar 包用 RAR 解压,直接查看 application.yml 文件,我们可以看到原来的 #spring.profiles.active# 已经被替换成了 dev ,这样在运行 Jar 包时就不需要进行参数指定,直接运行 java -jar xxx.jar 即可。

参与评论