三十九、Maven项目中profile+properties占位符

其它 同时被 2 个专栏收录
68 篇文章 0 订阅
34 篇文章 0 订阅

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

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

 

 
  1. <build>

  2. <resources>

  3. <resource>

  4. <directory>${project.basedir}/src/main/resources</directory>

  5. <filtering>true</filtering>

  6. </resource>

  7. <resource>

  8. <directory>${project.basedir}/bin</directory>

  9. <targetPath>/bin</targetPath>

  10. <filtering>true</filtering>

  11. </resource>

  12. </resources>

  13. </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文件的内容随着打包的参数不同而变化了,从而也就实现了我们多环境的配置自动打包了。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

仰望星空的尘埃

谢谢你的鼓励,一起努力吧!

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值