maven(16)-灵活的环境构建

本文介绍了一种使用Maven配置管理不同环境(如开发、测试和生产环境)的方法。通过定义多个环境配置文件并在pom.xml中设置不同的profile,可以根据当前环境自动加载相应的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多个环境

一个项目,在家的时候可能会在本机上运行,在公司可能在内网测试环境运行,上线后会在生产环境运行,在不同的环境中会有一些配置是不一样的,至少数据库就不一样。如果每换一个环境就去改所有配置太过于麻烦,以下方法就是通过一个参数灵活的切换不同的环境


项目结构


pom.xml

  1. <profiles>
  2. <profile>
  3. <id>dev</id>
  4. <properties>
  5. <env>dev</env>
  6. </properties>
  7. <activation>
  8. <activeByDefault>true</activeByDefault>
  9. </activation>
  10. </profile>
  11. <profile>
  12. <id>test</id>
  13. <properties>
  14. <env>test</env>
  15. </properties>
  16. <activation>
  17. <activeByDefault>false</activeByDefault>
  18. </activation>
  19. </profile>
  20. </profiles>
  21. <build>
  22. <filters>
  23. <filter>filters/${env}.properties</filter>
  24. </filters>
  25. <resources>
  26. <resource>
  27. <directory>src/main/resources</directory>
  28. <filtering>true</filtering>
  29. </resource>
  30. </resources>
  31. </build>

<profiles>:就是properties文件,通过加载不同的profile来区别不同的环境

<activeByDefault>:true代表当前激活的配置,false代表未激活,如果要切换环境只需要修改true和false,执行maven-update

<filter>:通过激活的profile中的<env>内容来加载filters目录下的不同的properties,自动过滤不同的环境

<filtering>:true就是用filters/${env}.properties的参数值来过滤src/main/resources中的properties文件,之后详解


Test.java

  1. import java.io.IOException;
  2. import java.io.InputStreamReader;
  3. import java.util.Properties;
  4. import org.springframework.stereotype.Component;
  5. @Component
  6. public class Test {
  7. static {
  8. Properties prop = new Properties();
  9. InputStreamReader in = null;
  10. try {
  11. in = new InputStreamReader(Test.class.getClassLoader().getResourceAsStream("aaa.properties"), "UTF-8");
  12. prop.load(in);
  13. System.out.println(prop.getProperty("aaa"));
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. } finally {
  17. try {
  18. in.close();
  19. } catch (IOException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }
  24. }

这是一个最基本的静态块,在项目启动的时候,读取aaa.properties文件中的参数aaa的值。需要配置spring自动扫描注解


properties

aaa.properties

aaa=${aaa}
这个aaa没有配一个固定参数值,而是用的${aaa},表示根据当前环境的不同过滤不同的值


dev.properties

aaa=bbb
dev就是当前激活的开发环境,这里的aaa就是要过滤替代${aaa}的值。在测试环境test.properties中可以设置不同的值


运行项目

如图,实际加载的aaa参数的值是dev.properties而不是aaa.properties

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值