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

多个环境

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


项目结构


pom.xml

  1. & lt;profiles& gt;
  2. & lt;profile& gt;
  3. & lt;id& gt;dev& lt; /id>
  4. <properties>
  5. <env>dev</env& gt;
  6. & lt; /properties>
  7. <activation>
  8. <activeByDefault>true</activeByDefault& gt;
  9. & lt; /activation>
  10. </profile& gt;
  11. & lt;profile& gt;
  12. & lt;id& gt;test& lt; /id>
  13. <properties>
  14. <env>test</env& gt;
  15. & lt; /properties>
  16. <activation>
  17. <activeByDefault>false</activeByDefault& gt;
  18. & lt; /activation>
  19. </profile& gt;
  20. & lt; /profiles>
  21. <build>
  22. <filters>
  23. <filter>filters/${env}.properties& lt; /filter>
  24. </filters& gt;
  25. & lt;resources& gt;
  26. & lt;resource& gt;
  27. & lt;directory& gt;src/main/resources& lt; /directory>
  28. <filtering>true</filtering& gt;
  29. & lt; /resource>
  30. </resources& gt;
  31. & lt; /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、付费专栏及课程。

余额充值