最新公告
  • 欢迎您光临编程知识分享网 加入我们
  • maven profile动态选择配置文件

    一、背景

    在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。

    maven提供了一种方便的解决这种问题的方案,就是profile功能。

    二、profile简介

    profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

    profile定义的位置

    (1)    针对于特定项目的profile配置我们可以定义在该项目的pom.xml中。(下面举例是这种方式)

    (2)    针对于特定用户的profile配置,我们可以在用户的settings.xml文件中定义profile。该文件在用户家目录下的“.m2”目录下。

    (3)    全局的profile配置。全局的profile是定义在Maven安装目录下的“conf/settings.xml”文件中的。

    三、配置动态打包

    1、配置profile

    在项目的profile中添加如下的profile配置:

    <profiles>
        <profile>
            <!-- 本地开发环境 -->
            <id>dev</id>
            <properties>
                <profiles.active>dev</profiles.active>
            </properties>
            <activation>
                <!-- 设置默认激活这个配置 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <!-- 发布环境 -->
            <id>release</id>
            <properties>
                <profiles.active>release</profiles.active>
            </properties>
        </profile>
        <profile>
            <!-- 测试环境 -->
            <id>beta</id>
            <properties>
                <profiles.active>beta</profiles.active>
            </properties>
        </profile>
    </profiles>

    这里定义了三个环境,分别是dev(开发环境)、beta(测试环境)、release(发布环境),其中开发环境是默认激活的(activeByDefault为true),这样如果在不指定profile时默认是开发环境,也在package的时候显示指定你要选择哪个开发环境,详情见后面。

    2、配置文件

    针对不同的环境,我们定义了不同的配置文件,文件目录如下:

    如图所示,开发环境、测试环境、生产环境的配置文件分别放到src/main/resources目录下的config文件夹下。

    config下有多个环境的配置文件,命名规则为是application-环境名称.properties。

    处理过程:

    1)通过profile选中你要使用的环境

    2)通过package命令,将环境变量注入到application.properties中(这样子,那些公用的环境变量就不用在各个环境的配置文件中配置了)

    3)项目中加载application.xml文件

    加载配置文件

    <context:property-placeholder location="classpath:application.properties"/>

    例子:

    application-beta.properties文件有如下部分内容:

    env.datasource.jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true&zeroDateTimeBehavior=round
    env.datasource.username=root
    env.datasource.password=12233

    application.properties有部分如下内容用于注入上面的内容:

    datasource.jdbcUrl=${env.datasource.jdbcUrl}
    datasource.username=${env.datasource.username}
    datasource.password=${env.datasource.password}

    3、maven资源插件配置

    在pom.xml的build结点下,配置资源文件的位置,如下所示:

    <build>
            <finalName>seewo-admin</finalName>
            <!-- 定义了变量配置文件的地址 -->
            <filters>
                <filter>src/main/resources/config/application-${env}.properties</filter>
            </filters>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    这里注意一个参数<filtering>true</filtering>,一定要设置成true.这样才会用对应env目录下的配置文件覆盖原来的。

    4、激活profile

    1)默认的激活

    上面的profile配置中设置的默认的激活环境。如下面所示

    <activeByDefault>true</activeByDefault>

    2)使用-P参数显示激活一个profile

    当我们在进行Maven操作时就可以使用-P参数显示的指定当前激活的是哪一个profile了。比如我们需要在对项目进行打包的时候使用id为dev的profile,我们就可以这样做:

    mvn package –Pdev

    这里假设dev是在settings.xml中使用dev标记的处于激活状态的profile,那么当我们使用“-P !profile”的时候就表示在当前操作中该profile将不处于激活状态。

    5、调用

    private Logger logger = LogManager.getLogger(MyApp.class.getName());

    其他的使用和log4j的是一样的。

    四、遇到的坑

    在application.xml文件中不能出现@关键字,就算你注释了也不行。当出现@了,之后的所有环境变量将不会被注入

    如:

    致谢:感谢您的阅读!

    赞赏

    微信赞赏支付宝赞赏

    编程知识分享网,一个有趣的平台!
    编程知识分享网|编程教程|资源下载|源码下载 » maven profile动态选择配置文件

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    关于编程知识分享网(www.ittce.com)
    编程知识分享网,一个有趣的平台,小心有毒!

    发表评论

    提供最优质的资源集合

    立即查看 了解详情
    升级SVIP尊享更多特权立即升级