文档章节

maven profile多环境自动切换配置,配置分离

HiAscend
 HiAscend
发布于 2017/07/05 20:39
字数 1176
阅读 18
收藏 0

痛点:

  在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环境对项目的需求也不相同。

  在此之前,我们往往需要手动去修改相对应的配置文件然后打成war,才能部署到相应的环境上。

  但是这样很容易出现问题,因为很容易出现少改或者漏改,造成不必要的麻烦

幻想:

  要是有一种东西,能让我们打war的时候指定一个参数,就能自动把项目编译成对应环境的war,那该有多幸福啊!!!

结果:这样的东西还真有,那就是maven-profile

一、项目src/main/resources目录下建立相对应的目录

比如笔者的

 我建立了三个目录,分别是:dev,test,pro分别表示开发环境,测试环境,生产环境。当然还可能有更多的环境。针对不同的环境,我们的配置文件可能会有不同的设置,比如我的需求是,三个环境的项目常量设置,数据库连接设置,log设置都可能不同。

那我就分别在三个文件中配置了不同设置,在外面也有三个相对应的文件,其实在开发的过程中外面的三个和dev里面的三个应该是相同的。

公共配置直接放到src/main/resources下

二、POM中的配置

 1  <profiles>
 2         <!--本地开发环境-->
 3         <profile>
 4             <id>dev</id>
 5             <properties>
 6                 <profiles.active>dev</profiles.active>
 7             </properties>
 8             <activation>
 9                 <activeByDefault>true</activeByDefault>
10             </activation>
11         </profile>
12         <!--测试环境-->
13         <profile>
14             <id>test</id>
15             <properties>
16                 <profiles.active>test</profiles.active>
17             </properties>
18         </profile>
19         <!--生产环境-->
20         <profile>
21             <id>pro</id>
22             <properties>
23                 <profiles.active>pro</profiles.active>
24             </properties>
25         </profile>
26     </profiles>
27 
28 <!--build部分-->
29     <build>
30         <finalName>xxx</finalName>
31         <sourceDirectory>src/main/java</sourceDirectory>
32         <testSourceDirectory>src/test/java</testSourceDirectory>
33         <resources>
34             <resource>
<!--项目的默认资源目录,但是要排除不必要的文件,想要指定加入的再下面的resource指定-->
35                 <directory>${project.basedir}/src/main/resources</directory>
36                 <excludes>
37                     <exclude>dbpool/**</exclude>
38                     <exclude>dev/*</exclude>
39                     <exclude>mbg/*</exclude>
40                     <exclude>pro/*</exclude>
41                     <exclude>test/*</exclude>
42                     <exclude>readme.txt</exclude>
43                 </excludes>
44             </resource>
45             <resource>
46                 <directory>${project.basedir}/src/main/resources/${profiles.active}</directory>
47                 <filtering>true</filtering>
48             </resource>
49             <resource>
50                 <directory>${project.basedir}/src/main/java</directory>
51                 <includes>
52                     <include>**/*.xml</include>
53                 </includes>
54                 <!--是否替换资源中的属性-->
55                 <filtering>true</filtering>
56             </resource>
57         </resources>
58 ...
59 </build>

 

3~26:我们设置了三个profile分别对应目录中的三个开发环境。

8~10:开发环境是默认激活的(activeByDefault为true),这样如果在不指定profile时默认是开发环境

34~44:项目的默认资源目录,但是要排除不必要的文件,想要指定加入的再下面的resource指定

45~48:根据当前激活的profile来把指定的配置文件加载到classpath下!!桥黑板:filtering标签一定要有,他的作用就是把src/main/resources的文件替换为dev|test|pro下的文件。(47行)

三、项目编译生成

所有需要的配置就完成了,通过在运行maven命令时指定不同的profile即可构建不同环境需要的war包或发布到不同的环境了 。如:

clean package -Ppro即构建出生产环境需要的war包

由于默认的profile是dev,所以如果我们不指定profile,那么加载就是开发环境dev下的配置文件了。即我们在本地开发测试时,不用关心profile的问题。

双击666,可以愉快的开发了,环境切换,游刃有余。

更详细的介绍:http://maven.apache.org/pom.html#Profiles

 

新增笔记:

在idea中设置maven执行命令,若找不到,路径如下:File->Settings->Keymap->Main menu->Run->Edit Confiturations...也可以自己添加一个快捷键,其实就在我们运行tomcat的的那个下拉按钮下。eclipse的请自行百度 “eclipse执行maven命令

选好项目目录,配置好Commang line。然后,我们打包的时候就可以点击上面的运行按钮了,愉快的不要不要的。

题外话:在使用maven-3.3.3的打包的时候,有时候会出现如下错误

ATAL ERROR in native method: JDWP on raw monitor enter, jvmtiError=JVMTI_ERROR_INVALID_ENVIRONMENT(116) 
JDWP exit error JVMTI_ERROR_WRONG_PHASE(112): on getting class status [../../../src/share/back/util.c:1265] 
JDWP exit error JVMTI_ERROR_INVALID_ENVIRONMENT(116): on raw monitor enter [../../../src/share/back/util.c:1034] 
ERROR: JDWP unable to dispose of JVMTI environment: JVMTI_ERROR_INVALID_ENVIRONMENT(116)

 

 其实不影响项目的打包,这是maven,或者是jvm的bug,比如

笔者在更换至maven-3.5.0之后,问题解决!

码字不易,尊重原创,转载请注明:http://www.cnblogs.com/adeng/p/7059588.html

本文转载自:http://www.cnblogs.com/adeng/p/7059588.html

共有 人打赏支持
HiAscend
粉丝 0
博文 24
码字总数 923
作品 0
东城
程序员
私信 提问
maven 整合 spring profiles功能

spring为beans标签提供了profile功能,以便项目的开发和生成环境分离。 <beans xmlns="http://www.springframework.org/schema/beans" </beans> 以数据库为例,开发环境使用的是直接将配置写......

yybear
2013/03/14
0
0
微服务之配置服务器切换profile

最近遇到Spring-boot的多个profile切换问题,需求是这样的:微服务中引入了Spring Cloud Config,服务启动的时候,从Config Server中读取该实例对应的配置信息。本地开发环境可能使用的profi...

aoho
2017/11/16
0
0
解决微服务profile遇到的问题

最近遇到Spring-boot的多个profile切换问题,需求是这样的:微服务中引入了Spring Cloud Config,服务启动的时候,从Config Server中读取该实例对应的配置信息。本地开发环境可能使用的profi...

禁区铁铍人
2017/11/29
0
0
基于maven的ssh框架一步一步搭建(二)

五、配置profile 1、profile是用来做什么的 Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。不同的构建环境是什么意思?构建环境的两个...

漂泊者及其影子
2014/07/16
3.6K
0
原来实现项目多环境打包部署是如此的简单

一、背景      在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开发环境、测试团队的测试环境、生产仿真环境、正式生产环境,不同的公司可能还会...

hafiz.zhang
2017/09/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mac 10.14 编译Android 8.1源码及刷入nexus 6p

环境准备 官网 描述得已经相当清楚了 ,这里稍微总结一下: 创建区分大小写的磁盘映像 mac系统默认是不区分大小写的,所以我们需要创建一个区分大小写的文件系统 hdiutil create -type SPARS...

猴亮屏
16分钟前
0
0
js获取url参数

function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var url =decodeURI(decodeURI(window.location.search)); var r = url.substr(1).match(reg);//s......

ArlenXu
23分钟前
1
0
(转)Spring MVC的常用注解

@Controller(常用) 注解一个类表示控制器,Spring MVC会自动扫描标注了这个注解的类。 @RequestMapping(常用) 请求路径映射,可以标注类,也可以是方法,可以指定请求类型,默认不指定为...

政旭Arvin
28分钟前
0
0
Navicat使用教程:在Navicat Monitor for MySQL/MariaDB中配置实例

下载Navicat Monitor最新版本 Navicat Monitor 是一套安全、简单而且无代理的远程服务器监控工具。它具有强大的功能使你的监控发挥最大效用。受监控的服务器包括 MySQL、MariaDB 和 Percona ...

电池盒
32分钟前
0
0
sql根据日期查询,本周,本月,本年,今日相关统计

sql根据日期查询,本周,本月,本年,今日相关统计 昨天 select * from tb where datediff(day, 时间字段 ,getdate()) = 1 今天 select * from tb where datediff(day, 时间字段 ,getdate()) = ...

BraveLN
42分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部