springprofile与mavenprofile

coding

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. 默认激活

以上是 springprofile与mavenprofile 的全部内容, 来源链接: utcz.com/z/509315.html

回到顶部