【maven】Maven根据Profile读取不同配置环境配置文件
开发需求:在日常开发中,我们大多都会有开发环境(dev)、测试环境(test)、生产环境(product),不同环境的参数肯定不一样,我们需要在打包的时候,不同环境打不同当包,如果手动改,一方面效率低,容易出错,而且每次打包都改动,麻烦,所以Maven给我们提供了profile的配置
先贴一段代码,然后后面讲一些概念
1、首先需求就是有三个环境,每个环境的配置参数不一样,希望在打包的时候,不同环境用的配置数据不一样
2、配置文件
dev
#这是dev环境配置
jdbc_url=jdbc:mysql://127.0.0.1:3306/abcdev
jdbc_user=root
jdbc_password=root
test
#这是test环境配置
jdbc_url=jdbc:mysql://192.168.1.180:3306/abcdev
jdbc_user=test_user
jdbc_password=test_password
product
#这是product环境配置
jdbc_url=jdbc:mysql://10.6.8.30:3306/abcdev
jdbc_user=product_user
jdbc_password=product_password
下面是spring 数据库连接配置中一段代码,其中数据库连接url, username, password用${key}这种方式
<!-- 创建数据库连接 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 数据库驱动 -->
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_user}" />
<property name="password" value="${jdbc_password}" /> <!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="20" /> <!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" /> <property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" /> <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> <!-- 配置监控统计拦截的filters -->
<property name="filters" value="stat" /> </bean>
3、pom一些配置
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>src/main/resources/dev.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
<build>
<filters>
<filter>src/main/resources/test.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
<build>
<filters>
<filter>src/main/resources/prod.properties</filter>
</filters>
</build>
</profile>
</profiles>
<build>
<finalName>myweb</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<filtering>true</filtering>
<excludes>
<exclude>application-text.xml</exclude>
<!--<exclude>src/main/resources/application-text.xml</exclude>-->
</excludes>
</resource>
</resources>
<!--<filters>-->
<!--<filter>src/main/resources/${profiles.active}.properties</filter>-->
<!--</filters>-->
</build>
4、最终,执行一个命令,mvn clean package ,我们看下编译后target下面的采用${key}有没有替换
我们看到已经替换为dev的数据库连接,如果想打test的包呢,很简单: mvn clean package -Ptest
好,到此为止,满足了我们的一个基本需求,我们来重点看看pom中的上面贴的配置
分析profile相关概念
1、profiles:定义各个环境的变量配置,我上面的代码中有三个环境,所以配了3个profile
<id>:profile的标示
<properties>:自己定义的一些属性,可有可无,比如我配置的jdbc.url这些属性,如果不想通过properties定义这些,可以在改属性下面配置
<filters>比较重要,指定当前profile环境下,属性文件路径;
分析build下属性
我们分析下<resource>下面的属性
<directory>: 配置那个目录下的文件通过${key}会被替换成属性值,resource目录下,我们一般放jdbc连接,或配置文件
<includes>:指定那个目录下那个文件
<filtering>:这个配置的意思是过滤上面指定属性文件中的占位符,占位符是${变量名称}这样的形式,maven会自动读取配置文件,然后解析其中的占位符,使用上面pom文件中定义的属性进行替换
<exclueds>:在resource目录下,有很多文件,但用些文件不希望替换,则可以通过<excluede>指定
<filters>:这里的filters与<profile>的filter意思一样,都是指属性文件地址,这个如果上面定义<profile>的时候指定了,这里就不需要了,但有些开发习惯是在<profile>不定义,然后在<build>里指定。
好了,只有简单配置这些,在使用maven命令的时候 mvn clean package -PprofileId ,就可以根据不同环境打不同的包了
【maven】Maven根据Profile读取不同配置环境配置文件的更多相关文章
- 在CentOS的profile文件中配置环境变量
# idea jdk7 settings start #JAVA_HOME=/usr/local/jdk/jdk1.7.0_79 #JRE_HOME=$JAVA_HOME/jre #PATH=$PAT ...
- spring boot使用profile来区分正式环境配置文件与测试环境配置文件
转载请在页首注明作者与出处 一:前言 经常在开发的时候,项目中的配置文件,在个人开发的时候有一套配置文件,在测试环境有一套配置文件,在正式环境有一套配置文件,这个时候如果配置文件复杂,需要改的东西就特 ...
- Linux下安装tar.gz类型的jdk,并配置环境变量
近期因要学习一门技术,必须在Linux下运行,故开始学习如何使用Linux. 在安装jdk时出现了困难,环境变量配置不成功,花了一天时间才搞定,特分享出来,供大家参考. Linux下安装jdk,步骤如 ...
- Linux下安装java的jdk和配置环境变量
每次感觉配这个超级简单 但是每次都要查下 记一下好了 Linux下安装jdk,步骤如下 1:下载jdk包:本章使用的为后缀为tar.gz的文件(不需要安装),如jdk-8u111-linux-x64. ...
- ubuntu下关于profile和bashrc中环境变量的理解
(0) 写在前面 有些名词可能需要解释一下.(也可以先不看这一节,在后面看到有疑惑再上来看相关解释) $PS1和交互式运行(running interactively): 简单地来说,交互式运行就是在 ...
- ubuntu下关于profile和bashrc中环境变量的理解(转)
ubuntu下关于profile和bashrc中环境变量的理解(转) (0) 写在前面 有些名词可能需要解释一下.(也可以先不看这一节,在后面看到有疑惑再上来看相关解释) $PS1和交互式运行(r ...
- Springboot(二)-application.yml默认的配置项以及读取自定义配置
写在前面 ===== spring-boot 版本:2.0.0.RELEASE ===== 读取自定义配置 1.配置文件:sys.properties supply.place=云南 supply.c ...
- Maven 整合 spring profile实现多环境自动切换
Maven 整合 spring profile实现多环境自动切换 时间:2014-03-19 15:32来源:Internet 作者:Internet 点击:525次 profile主要用在项目多环境 ...
- maven插件 按配置加载不同环境配置文件进行打包(maven-war-plugin)
1.配置多种不同环境 如(本地local,开发dev,测试test 环境等) <profiles> <profile> <id>local</id> & ...
随机推荐
- 【备档】客户端自动化(主Android Appium + python
之前做分享写的文档,备档~ 0.移动客户端自动化简介 客户端自动化测试的本质 定位对象 · 操作对象 · 校验对象 对象的定位应该是自动化测试的核心,要想操作.校验一个对象,首先应该识别这个对象. 一 ...
- vysor 破解 (插件 V1.7.8 客户端2.1.0)
0.环境 mac os ===19年更新-客户端破解=== 换了个电脑,老的Chrome 插件各种问题,就换了客户端,然后就是一片模糊... 参考文档:https://www.sdbeta.com/w ...
- jsp / get 中文乱码问题
POST 方式下的解决方式还算简单,因为POST 方式下提交的数据都是以二进制的方式附加在http请求的body部分发送,只需要在后台指定编码格式就足矣解决. GET 方式下会将参数直接附加到url ...
- 绑定任意格式的XML文档到WPF的TreeView
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> ...
- 我的Java学习笔记-语法
Java的语法与C#的语法基本都一样,毕竟都是面向对象编程语言.下面记录下Java独有的和我在C#中学习不熟的语法知识 一.Java是解释型语言 二.Java修饰符 1. 访问控制修饰符 defaul ...
- nyoj38
布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有 ...
- splunk LB和scale(根本在于分布式扩展index,search)
Forwarder deployment topologies You can deploy forwarders in a wide variety of scenarios. This topic ...
- Lightbox JS v2.0图片切换效果
代码下载
- JS将日期转化为unix时间戳
var str = '2008-10-09 21:35:28';//PHP中对应的UNIX时间戳为1223559328 var new_str = str.replace(/:/g,'-'); new ...
- 远程访问Centos6.5上的mysql或者mariadb(navicat)
问题背景 1 环境 物理主机操作系统Centos6.5 虚拟主机KVM:centos6.5 64位min版本(虚拟机安装有台) 网络:桥接模式 2 问题 yum安装mariadb10/mysql6.5 ...