3.Maven 根据开发,测试,生产环境一键打包动态切换 所有微服务

解决的问题:各种环境配置如数据库,redis在各种开发,测试,生产环境的 参数并不相同,当打包时,需要动态切换,从而改变Spring 注解引入的参数

<build>
        <finalName>face-10001</finalName>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>env/dev/*</exclude>
                    <exclude>env/test/*</exclude>
                    <exclude>env/pro/*</exclude>
                </excludes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources/env/${env}</directory>
                <includes>
                    <include>*.*</include>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>


        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--这里写上main方法所在类的路径-->
                <configuration>
                    <mainClass>com.findplus.face.FaceApp</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                C:\Users\13528\Desktop\package
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

 <exclude>表示除了这些文件,其余的都是配置文件,这些配置文件   不会   被打包到 classes 中去.

 <include> 表示这些文件是配置文件,<filtering>为true,这些配置文件  会被 打包到 classes ,这两组标签 先后的  写法 ,作用是: 先整体排除掉env里所有的文件, 在局部添加  本次  mvn  package 指明的 dev 或 test 或 pro ,这样,打包过去的就只有某一种环境的配置文件.

目录结构如下:

 

 

<profiles>
        <profile>
            <!-- 开发环境 -->
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
            <activation>
                <!-- 设置默认激活这个配置 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <!-- 测试环境 -->
            <id>test</id>
            <properties>
                <env>test</env>
            </properties>
        </profile>
        <profile>
            <!-- 发布环境 -->
            <id>pro</id>
            <properties>
                <env>pro</env>
            </properties>
        </profile>
    </profiles>

 

 这样,我们可以通过 该注解 在启动类 指定配置文件 ,可以根据 /dev/test/pro 不同环境动态获取参数了

@PropertySource("classpath:config.properties")
public class FaceApp {
    public static void main(String[] args) {
        SpringApplication.run(FaceApp.class, args);
    }
}

 

这些配置存在于父pom 中,所有子module 都继承该父pom

<profiles>
<profile>
<!-- 开发环境 -->
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 测试环境 -->
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<profile>
<!-- 发布环境 -->
<id>pro</id>
<properties>
<env>pro</env>
</properties>
</profile>
</profiles>

posted on 2018-07-16 20:08  老曹123  阅读(314)  评论(0)    收藏  举报

导航