spring profile 与maven profile


声明:本文转载自https://my.oschina.net/zhzx/blog/1824218,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

profile:

n.  侧面,半面; 外形,轮廓; [航]翼型; 人物简介;
vt.  描…的轮廓; 给…画侧面图; 为(某人)写传略; [机]铣出…的轮廓;

这个词具体是什么意思,参考:https://www.zhihu.com/question/28464897

我的理解,就是一个配置。

一、spring中的profile

 profile 说白了就是利用一个变量来控制加载哪些bean。主要用在实现在不同的环境下加载不同的bean。

比如在测试环境下,加载根据这个数据库的配信息生成的bean,在生产环境下使用另一个bean。

简单用法:

将spring-profile-test.xml和spring-profile-dev.xml都import入主配置文件中,但是由于spring.profile.active的值不同,真正加载的bean也不同(不满足profile值的bean不会被加载,此时相当于import了一个空文件)

在运行的使用配置下面参数来激活test环境需要加载的bean,profile的值可以有多个,测试需要用“,”隔开。

-Dspring.profiles.active=test

当然profile还有其他激活方法,如:

  1. DispatcherServlet的初始化参数传入
  2. web app上下文参数传入
  3. JNDI入口
  4. 环境变量
  5. JVM系统属性
  6. @ActiveProfiles

二、maven中的profile

spring的核心是依赖反转(创建bean,注入bean),是所以spring的profile是影响bean的创建和注入,maven是用来构建java项目的工具,所以maven的profile影响maven的构建。

还拿上面的场景来说明问题,我们开发的时候连接开发库,测试的时候希望连接测试库,生产环境连接生产库。我们也可以使用maven的profile在打包的环节实现(spring的profile是在运行环节的启动阶段实现的)。

我们的db.properties可以按照下面这种写法

db.driver=${db.driver} db.url=${db.url} db.user=${db.user} db.password=${db.password}

在项目的pom.xml中定义这些属性

<profiles>     <profile>         <id>dev</id>         <properties>             <finalName>dev</finalName>             <db.driver>com.mysql.jdbc.Driver</db.driver>             <db.url>jdbc:mysql://localhost:3306/dev</db.url>             <db.user>root</db.user>             <db.password>123456</db.password>         </properties>          <activation>             <activeByDefault>true</activeByDefault>         </activation>         <build>             <finalName>${finalName}</finalName><!--影响最终构建名称-->             <resources>                 <resource>                     <filtering>true</filtering><!--启用资源过滤,影响资源文件-->                     <directory>${project.basedir}/src/main/resources</directory>                     <excludes>                         <exclude>spring-profile-test.xml</exclude>                     </excludes>                 </resource>             </resources>         </build>     </profile> </profiles>

注意:仅仅在profile中添加相应的property并不能会让maven在打包的时候替换这些属性,maven默认只会解析pom.xml中的属性引用。maven处理资源的插件是maven-resources-plugin,它默认会将资源文件复制到输出目录,如果需要它处理资源文件,就需要开启资源过滤,在resource中添加<filtering>true</filtering>即可。此时执行命令:mvn clean package -Pdev,命令执行完成后,就可以在打的包中看到如下处理过后的db.properties,如下所示

maven的profile使用的简单例子已经讲完了,下面讲,粗略地讲一下maven profile在哪里定义

和怎样激活。

  1. maven profile可以在pom.xml中定义,可以定制的元素比较多,比如构建名称,依赖等,打包后pom.xml中包含完整的profile
  2. 也可以在settings.xml中定义,分为用户级别(对本机用户所有maven项目使用)和全局级别(对本机所有maven项目使用)。
  3. 使用maven2时还可以在项目的pom.xml所在的目录中使用profiles.xml定义,maven3中已移除,不推荐使用。

不同地方定义的profile可以使用的pom元素不同。pom.xml中的profile可以随着pom.xml一起提交到代码仓库中,还能被安装到本地仓库和远程仓库中,所以可以修改和增加很多pom元素。pom.xml文件之外的三种profile称为外部profile,由于无法保证它们会随着pom.xml一起被分发(profiles.xml默认不会被安装到本地仓库或者远程仓库) ,所以maven不允许它们添加或者修改绝大多数的pom元素。举个例子:用户A添加了外部profile让项目构建成功,用户B没有添加而导致项目构建失败,这就导致了构建项目的移植性问题。

下面列maven profile的激活:

  1. 命令行激活,使用-P参数,如果有多个profile则使用逗号隔开
  2. 使用settings.xml文件激活
  3. 系统属性激活,如果某个系统属性存在就能激活,甚至某个系统属性等于某个值才能激活
  4. 操作系统环境激活,系统是windows ?,linux?
  5. 文件存在与否激活
  6. 默认激活

 

本文发表于2018年06月05日 16:00
(c)注:本文转载自https://my.oschina.net/zhzx/blog/1824218,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1808 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1