基于maven的profile实现动态选择配置文件
需求
根据选择不同的部署环境自动替换相关配置变量,如连接的数据库等。
最终效果概览
- 部署环境分为dev和release
- 工程目录结构
myproject
|-profile
| |-dev
| | |-dbconfig.properties
| |-release
| |-dbconfig.properties
|-src
| |-main
| |-java
| |-webapp
| |-resources
| |-dbconfig.properties
|-pom.xml
- 部署时执行命令
- dev
mvn clean package -Pdev - release
mvn clean package -Prelease
- dev
实现步骤
1. 编辑各环境的变量
按如下结构创建目录和文件(各目录、文件的名字和路径均可更改,与下一步的配置对应即可)
myproject
|-profile
| |-dev
| | |-dbconfig.properties
| |-release
| |-dbconfig.properties
dev/dbconfig.properties内容如下
jdbc.url=jdbc\:oracle\:thin\:@111.00.00.111\:1521\:orcl
jdbc.username=myproject
jdbc.password=myproject_test
jdbc.dbType=oracle
release/dbconfig.properties内容如下
jdbc.url=jdbc\:oracle\:thin\:@222.00.00.222\:1521\:orcl
jdbc.username=myproject
jdbc.password=myproject_release
jdbc.dbType=oracle
项目实际访问的数据库配置文件位于myproject/src/main/resources/dbconfig.properties,内容如下
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
jdbc.dbType=${jdbc.dbType}
在部署过程中${xxx}将被替换为对应环境的值,变量名称与dev/dbconfig.properties、release/dbconfig.properties的字段名对应。
2. pom.xml中配置profile
在pom.xml的<project></project>
中添加如下配置
<profiles>
<profile>
<!-- 开发环境 -->
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>${basedir}/profile/dev/dbconfig.properties</filter>
</filters>
</build>
</profile>
<profile>
<!-- 生产环境 -->
<id>release</id>
<build>
<filters>
<filter>${basedir}/profile/release/dbconfig.properties</filter>
</filters>
</build>
</profile>
</profiles>
此处添加两个profile,分别为开发环境的dev和正式环境的release,其中dev环境配置了<activeByDefault>true</activeByDefault>
,指定dev为默认配置
3. 激活过滤资源
pom.xml配置资源时,针对待替换的资源设置<filtering>true</filtering>
。本例中配置为src/main/resources下的所有properties文件都需要检测替换。
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
4. 部署
mvn命令中-P可指定profile
根据配置中profile的id可选择对应的部署环境,如部署到正式环境时执行如下命令即可完成打包
mvn clean package -Prelease
其他
IDEA中的使用
在idea的Maven Project标签中可以看到项目配置的profile,如果通过<activeByDefault>true</activeByDefault>
指定了默认环境,在项目构建过程将会自动勾选默认的环境,如此可以在其他开发成员对profile概念不熟悉时仍然能正常运行项目。
基于maven的profile实现动态选择配置文件的更多相关文章
- maven profile动态选择配置文件
一.背景 在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配 ...
- PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版)
PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版) 先看流程图: 大概介绍一下: 版本选择使用jenkins 中的 git parameter 插件实现 回滚方式 ...
- Maven之profile实现多环境配置动态切换
一般的软件项目,在开发.测试及生产等环境下配置文件中参数是不同的.传统的做法是在项目部署的时候,手动修改或者替换这个配置文件.这样太麻烦了,我们可以用Maven的profile来解决这 ...
- 基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建
基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Sp ...
- Spring 3整合Quartz 1实现定时任务一:常规整合(基于maven构建)
Spring配置Quartz例子(基于maven构建) 在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类 ...
- 基于maven进行spring 和mybatis的整合(Myeclpise)
学习日记:基于maven进行spring和mybatis的整合,进行分页查询 什么是maven:maven是一个项目管理工具,使用maven可以自动管理java项目的整个生命周期,包括编译.构建.测试 ...
- ExpandoObject与DynamicObject的使用 RabbitMQ与.net core(一)安装 RabbitMQ与.net core(二)Producer与Exchange ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler) .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
ExpandoObject与DynamicObject的使用 using ImpromptuInterface; using System; using System.Dynamic; names ...
- 基于maven使用IDEA创建多模块项目
原文地址:http://blog.csdn.net/williamhappy/article/details/54376855 鉴于最近学习一个分布式项目的开发,讲一下关于使用IntelliJ IDE ...
- 把Java Web工程转换为基于Maven的Web工程
有一个之前的工程,在使用了基于Maven的Web开发后,发现这种方式很便利,于是就想把之前老的传统的J2EE Web Project转为Maven Web Project. 转换的思路如下: 1.新建 ...
随机推荐
- 玩转JS系列之代码加载篇
从前我们这样写js <script type="text/javascript"> function a(){ console.log('a init');}funct ...
- 关于Thread类的简单使用
线程:线程也被称为轻量级进程,进程和线程都提供一个执行环境,但创建一个新的线程比创建一个新的进程资源要少得多 线程存在进程里,也就是说一个进程至少包括一个线程 线程共享进程的资源,包括内存和打开的文件 ...
- 安装配置 flannel - 每天5分钟玩转 Docker 容器技术(59)
上一节我们部署了 etcd,本节安装和配置 flannel. build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 buil ...
- cycript
cycript是大神saurik开发的一个非常强大的工具,可以让开发者在命令行下和应用交互,在运行时查看和修改应用.它确实可以帮助你破解一些应用,但我觉得这个工具主要还是用来学习其他应用的设计(主要是 ...
- 【Shell Basic】source . 与 bash sh 的区别
一.在命令行窗口执行shell脚本时,source .所执行的脚本中,变量的作用域在当前shell窗口期,而bash.sh在shell脚本执行完了就失效了. dream361@master:~$ ca ...
- Fatal error: Class 'LearningPHP1\mysqli' not found
在php文件的头部使用了namespace 结果报错mysqli不在LearningPHP1中, 结论:如果定义了命名空间,在使用mysqli做连接的时候就要指明mysqli所在的命名空间. < ...
- Servlet中Response对象应用1(输出简单文字、实现文件下载)
通过response对象可以实现很多功能,下面的代码都是在myeclipse上实现过的,整理下路,以备后用. response对象应用1 1向客户端发送简单消息 A利用已经声明的对象,调用其getOu ...
- QQ无法通过ISA2006&TMG2010代理收发图片问题解决
近期公司有业务需求通过TMG访问QQ,但配置多次均无法通过QQ收发图片,文字输入正常. 目前已解决,供参考: 这个问题是SSL端口默认使用了443,但QQ的离线文件不使用这个端口.所以ISA会把QQ的 ...
- jsp页面附件上传暂存的处理
有没有遇到页面是新建一个新对象,对象里面需要上传附件,但是只有当对象保存时才将附件一同上传到数据库的情况? 这种情况的处理可以参考狐狸的思路: @jsp页面创建一个botton bn,该button的 ...
- 常用Linux操作指令
-------------------------------Linux目录------------------------------- /:根目录,一般根目录下只存放目录,在Linux下有且只有一 ...