maven中的多环境配置及打包注意事项

[TOC]

多环境配置介绍

在一个项目中,为了区分环境,通常会分为测试环境(QA)、开发环境(dev),正式环境(prod)等。每个环境中配置不相同。作为刚毕业不久的javaer 在使用maven中,由于不知道配置原理,自己新建一个项目后在打包过程中往往会出现各种各样的问题。今天把maven中常用的环境配置总结一下,方便以后自己查看,也为了指导遇到相同问题的人。

项目结构图

先来一张整体的项目结构图大家来感受一下。


maven中的多环境配置及打包注意事项_第1张图片
项目结构图.png

多环境的使用

比如我们在使用spring框架的时候,由于环境的不同,在配置数据库连接的时候,并没有把账号、密码、url写死,而是使用占位符的形式(如:${username}就是一个占位符),真正的的属性值是配置在properties文件中。
spring配置文件如下:

  
        
        
        
    

在properties中的配置如下。

  在test配置文件中:
  username=test
  passwrod=test
  url=10.10.100.102/test
  
 在dev配置文件中:
  username=dev
  passwrod=dev
  url=10.10.100.102/dev

  在prod配置文件中
  username=prod
  passwrod=prod
  url=www.web.com/prod

由于我们的项目是分环境的,所以spring加载配置文件的时候,不能把选择哪个配置文件写死,根据我们的命名规则,如果是测试环境,应该加载app-test.properties,正式环境应该为app-prod.properties 那么在spring中的placeHolderBean应该这样配置:


        
    

看到上面的${env} 了吗? 他就是我们的“环境变量”,我们指定哪个环境,就会加载哪个环境下面的环境变量。

如何配置环境变量呢?

在maven的pom中,有profies标签,就是来定义环境变量的。
配置如下:


    
        
        
            test
            
                test
            
        

        
        
            dev
            
                
                dev
            
            
                
                true
            
        

        
        
            prod
            
                prod
            
        
    

解释: 每个节点是一个环境,当这个节点被激活的时候,其中的配置将会起作用。举个例子:在我们的配置文件中,dev环境是默认激活的。也就是当前处于dev环境中,那么env的值就是dev。也就是说 spring中的配置文件中 ${env} 的值是dev。

占位符是如何被替换的呢?

在maven 执行项目构建的过程中,将会对resource下面的配置文件中的变量进行替换。首先来看一下maven中的build节点。



        
        web-demo
        
        src/main/java
        src/test/java
        
        
            
            src/main/resources/conf/app-${env}.properties
        
        
            
            
                src/main/resources
                
                    **/*.properties
                    **/*.xml
                
                
                true
                
                ${project.build.directory}/classes/
            
        
        

重点解释:假设我们激活的是dev环境

  • filter : 从哪个配置文件中读取变量。
    src/main/resources/conf/app-dev.properties
    表示读取app-dev.properties 中的变量值。
  • resource :表示哪些文件是配置文件,其中配置文件中的占位符将会被filter 中的变量替换。
    举个例子:比如我们在spring配置文件中使用了占位符,,其中${username} 将会被替换为dev.看不懂可以看下图。


    maven中的多环境配置及打包注意事项_第2张图片
    原始.png
maven中的多环境配置及打包注意事项_第3张图片
编译.png

在我们的源文件中,配置的是${username} 经过maven编译之后,username就变成了dev。

  • filtering :资源目录是否开启过滤,也就是说resocurs目录下面的配置文件是否要全部打包到class path中。true 将会过滤,includes 指定了过滤规则。
  • targetPath :指定资源文件的复制路径。

如何激活我们的环境变量呢?

1.方法一: 开发阶段可以用idea 来激活


maven中的多环境配置及打包注意事项_第4张图片
idea激活环境.png

在 maven -> profies 中可以选择我们要激活的话就
2.方法二: 使用打包参数 -Pdev等

  clean package -U -Dmaven.test.skip -Pdev
maven中的多环境配置及打包注意事项_第5张图片
命令行激活.png

写在最后的测试

// config 类
public class Config {
    private String username;
    private String password;
    private String url;
}

//controller
@Controller
public class ConfigController {
    @Autowired
    Config config;
    @RequestMapping("/config")
    @ResponseBody
    public Config getConfig(){
        return config;
    }
}

这次我激活prod环境 在地址栏中访问:http://localhost:8080/config
返回结果如下:

{"username":"prod","password":"prod","url":"www.web.com/prod"}

the end...


maven中的多环境配置及打包注意事项_第6张图片
微信图片_20180602205537.jpg

你可能感兴趣的:(maven中的多环境配置及打包注意事项)