maven的profile与properties文件

今天遇到一个问题,就是properties文件中赋值用的这种形式${xxx},真正的值是配置在pom的profile中,但是未生效。

后来找到原因,原来是pom中少了一段代码:

<build>
		<resources>
			<resource>
				<directory>${project.basedir}/src/main/resources</directory>
				<filtering>true</filtering>
			</resource>
			<resource>
				<directory>${project.basedir}/bin</directory>
				<targetPath>/bin</targetPath>
				<filtering>true</filtering>
			</resource>
		</resources>
	</build>

关于profile的详细介绍参见如下:

使用maven管理项目有一个好处是就是可以针对不同的环境使用不同的编译打包设置,方便了多环境下的打包部署,一般我们开发项目都会有至少开发环境和正式环境两个,针对这两个环境的配置信息也会有所不同,比如数据库的配置等。我们可以使用maven的profile定义来进行区分,比如我们在项目的pom文件中定义如下片段:

   
   
  1. <project>
  2. <modelVersion>4.0.0 </modelVersion>
  3. <groupId>cc.mzone </groupId>
  4. <artifactId>myjar </artifactId>
  5. <version>0.1 </version>
  6. <packaging>jar </packaging>
  7. <build>
  8. <resources>
  9. <resource>
  10. <directory>src/main/resources </directory>
  11. <includes>
  12. <include>*.* </include>
  13. </includes>
  14. <filtering>true </filtering>
  15. </resource>
  16. </resources>
  17. </build>
  18.  
  19. <properties>
  20. <jdbc.url>jdbc:mysql://localhost:3306/abc </jdbc.url>
  21. <jdbc.username>root </jdbc.username>
  22. <jdbc.password>root </jdbc.password>
  23. </properties>
  24.  
  25. <profiles>
  26. <profile>
  27. <id>product </id>
  28. <properties>
  29. <jdbc.url>jdbc:mysql://localhost:3306/abc123 </jdbc.url>
  30. <jdbc.username>rootuser </jdbc.username>
  31. <jdbc.password>rootpwd </jdbc.password>
  32. </properties>
  33. </profile>
  34. </profiles>
  35. </project>

      这里我们在pom文件中定义了数据库的相关配置,同时定义了一个profile,其id为product,同时在这个profile中也定义了数据库的相关配置。这样我们使用mvn package命令时就可以使用默认的jdbc设置,当我们使用mvn package -P product时maven就会自动使用id为product的profile中的数据库配置,这个是maven读取属性配置文件的覆盖。

      然后再看pom文件中的resources段的配置:

   
   
  1. <resources>
  2. <resource>
  3. <directory>src/main/resources </directory>
  4. <includes>
  5. <include>*.* </include>
  6. </includes>
  7. <filtering>true </filtering>
  8. </resource>
  9. </resources>

      其中最重要的是<filtering>true</filtering>这段,这个配置的意思是过滤上面指定属性文件中的占位符,占位符是${变量名称}这样的形式,maven会自动读取配置文件,然后解析其中的占位符,使用上面pom文件中定义的属性进行替换。我们可以在src/main/resources下定义一个jdbc.properties配置文件,内容如下:

   
   
  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url= ${jdbc.url}
  3. jdbc.username= ${jdbc.username}
  4. jdbc.password= ${jdbc.password}

      执行的效果如下:


    
    
  1. ## 使用默认的配置信息
  2. mvn clean package
  3.  
  4. ## 使用product环境的配置信息
  5. mvn clean package -P product

分两次执行上面的命令后,然后到项目的target目录下查看打包后的结果,可以看到jdbc.properties文件的内容随着打包的参数不同而变化了,从而也就实现了我们多环境的配置自动打包了。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值