maven profile

什么是MavenProfile?

        在我们平常的java开发中,会经常使用到很多配制文件(xxx.properties,xxx.xml),而当我们在本地开发(dev),测试环境测试(test),线上生产使用(product)时,需要不停的去修改这些配制文件,次数一多,相当麻烦。现在,利用maven的filter和profile功能,我们可实现在编译阶段简单的指定一个参数就能切换配制,提高效率,还不容易出错.

        profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

入门pom.xml

<properties>
  	<port>9105</port>
  </properties>
  <build>  
	  <plugins>	     
	      <plugin>
			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.2</version>
			<configuration>
				<!-- 指定端口 -->
				<port>${port}</port>
				<!-- 请求路径 -->
				<path>/</path>
			</configuration>
	  	  </plugin>
	  </plugins>  
    </build>

        运行tomcat7:run ,发现运行结果是一样的,因为port是变量,而变量值是定义为9105。这其实就是我们之前学习的maven的变量。那我们现在思考一下,如果这个端口在开发时使用9105,如果在生产环境(或其他环境)为9205呢?如何解决值的动态切换呢?这时我们修改pom.xml,增加profile定义

<profiles>
  	<profile>
  		<id>dev</id>
  		<properties>
  			<port>9105</port>
  		</properties>
  	</profile>
  	<profile>
  		<id>pro</id>
  		<properties>
  			<port>9205</port>
  		</properties>
  	</profile>  
  </profiles>

        执行命令 tomcat7:run -P pro  发现以9205端口启动

        执行命令 tomcat7:run -P dev  发现以9105端口启动

        -P 后边跟的是profile的id

        如果我们只执行命令tomcat7:run ,也是以9105启动,因为我们一开始定义的变量值就是9105,就是在不指定profileID时的默认值.

切换数据库连接配置

1.编写不同环境的配置文件

(1)我们在dao工程中src/main/resources下创建filter文件夹

(2)filter文件夹下创建db_dev.properties ,用于配置开发环境用到的数据库

env.jdbc.driver=com.mysql.jdbc.Driver
env.jdbc.url=jdbc:mysql://localhost:3306/db?characterEncoding=utf-8
env.jdbc.username=root
env.jdbc.password=123456

(3)filter文件夹下创建db_pro.properties  

env.jdbc.driver=com.mysql.jdbc.Driver
env.jdbc.url=jdbc:mysql://localhost:3306/db_pro?characterEncoding=utf-8
env.jdbc.username=root
env.jdbc.password=123456

(4)修改properties下的db.properties

jdbc.driver=${env.jdbc.driver}
jdbc.url=${env.jdbc.url}
jdbc.username=${env.jdbc.username}
jdbc.password=${env.jdbc.password}

2.定义Profile

修改pom.xml

 <properties>
  		<env>dev</env>
  </properties>
  <profiles>
  	<profile>
  		<id>dev</id>
  		<properties>
  			<env>dev</env>
  		</properties>
  	</profile>    
  	<profile>
  		<id>pro</id>
  		<properties>
  			<env>pro</env>
  		</properties>
  	</profile>
  </profiles>

3.资源过滤与变量替换

修改pom.xml ,在build节点中添加如下配置

  	<filters>
  		<filter>src/main/resources/filters/db_${env}.properties</filter>
  	</filters>
  	<resources>
  		<resource>
  			<directory>src/main/resources</directory>
  			<filtering>true</filtering>
  		</resource>  		
  	</resources>

        这里我们利用filter实现对资源文件(resouces) 过滤 , maven filter可利用指定的xxx.properties中对应的key=value对资源文件中的${key}进行替换,最终把你的资源文件中的username=${key}替换成username=value 

4.打包

在dao 工程 执行命令:package -P pro ,  解压生成的jar包,观察db.properties配置文件内容,已经替换为生产环境的值。(数据库要是没有的话生成不了对的jar包)

在sellergoods-service工程 执行命令 pageage  ,解压生成的war包里的pinyougou-dao的jar包,发现也是生成环境的值。

5.测试运行

【1】连接生产数据库

(1)在dao 工程执行命令:install -P pro

(2)在sellergoods-service:执行命令:tomcat7:run

(3)在shop-web :  执行命令:tomcat7:run

【2】连接开发数据库

(1)在dao 工程执行命令:install -P dev  (或 install   )

(2)在sellergoods-service:执行命令:tomcat7:run

(3)在shop-web :  执行命令:tomcat7:run

切换注册中心连接配置

1.集中配置注册中心地址

  1. 在common工程中properties下创建dubbox.properties
    address=192.168.25.100:2181
  2. Spring目录下创建spring配置文件 applicationContext-dubbox.xml 配置如下:
    <dubbo:registry protocol="zookeeper" address="${address}"/>
  3. 所有的服务工程与web工程都要依赖common . 并删除每个工程中关于注册中心地址的配置  
  4. 没有加载applicationContext-dubbox.xml 文件的要在web.xml里配置监听器
    <!-- 
    	web工程添加监听(从service的web.xml里面找)主要是启动common的application-*配置文件
    	web工程添加common的依赖 
    	-->
    <!-- 加载spring容器 -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath*:spring/applicationContext*.xml</param-value>
    	</context-param>
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
  5. 安装common到本地仓库,然后测试运行。

2.MavenProfile配置

  1. 在pinyougou-common工程中创建filters目录 ,目录下建立dubbox_dev.properties
    env.address=192.168.25.135:2181
  2. 建立dubbox_pro.properties
    env.address=192.168.25.136:2181
  3. 修改dubbox.properties
    address=${env.address}
  4. 修改pinyougou-common的pom.xml
<properties>
		<env>dev</env>	
</properties>
 <profiles>
	<profile>
		<id>dev</id>
		<properties>
			<env>dev</env>
		</properties>
	</profile>
	<profile>
		<id>pro</id>
		<properties>
			<env>pro</env>
		</properties>
	</profile>
</profiles> 
.............................
 <build>
		<filters>
			<filter>src/main/resources/filters/dubbox_${env}.properties</filter>
		</filters>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
			</resource>	
		</resources>	
  </build>

有单独配置文件和无单独文件的区别

1.无单独文件: 普通bean配置/ pom(profile)

加载文件的需要使用filters,如果不用加载文件(例如dubbox生产,测试环境是单独写到了几个文件中)是不用filters的,例如下方

<!-- solr服务器地址 -->
	<solr:solr-server id="solrServer_dev" url="http://127.0.0.1:8080/solr" />

	<bean id="solrServer_pro" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
		<constructor-arg value="192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183" />
		<property name="defaultCollection" value="collection2"></property>
	</bean>
   
	<!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
	<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
		<constructor-arg ref="solrServer_${env}" /><!-- 能用,但是集群里没有数据 -->
	</bean>

pom.xml.

  <properties>
  	<env>dev</env>
  </properties>
  <profiles>
  	<profile>
  		<id>dev</id>
  		<properties>
  			<env>dev</env>
  		</properties>
  	</profile>
  	<profile>
  		<id>pro</id>
  		<properties>
  			<env>pro</env>
  		</properties>
  	</profile>
  </profiles>

2.有单独文件:   filter多个配置文件(生产/测试/$引入)/ pom.xml(profiles, filter)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值