资讯专栏INFORMATION COLUMN

通过maven管理不同环境下的配置文件

loonggg / 1457人阅读

摘要:在实际用中,我们的服务通常要部署在不同的环境中,并且每个环境有只适用于本环境的配置文件。在读取配置文件的时候,通过系统变量进行选择某一个配置文件或者在部署脚本中将不同机房的配置文件按照部署的环境不同进行上传。

在实际用中,我们的Java服务通常要部署在不同的环境中,并且每个环境有只适用于本环境的配置文件。
例如测试环境需要连接测试数据库,生产环境又会在不同的机房进行服务部署,需要连接本机房的数据库从库。
同时,每个环境的配置又有很多相同的部分,比如cache的超时时间等。本文介绍如何使用maven进行多个部署环境的配置文件管理。

对于多个运行环境的配置文件管理,比较原始的方法是为每一个部署环境创建一个配置文件:

resources
├── prod_beijing_config.properties
├── prod_shanghai_config.properties
├── dev_config.properties
└── config.properties

在上面的例子中我们配置了两个正式环境的配置文件,分别是北京机房和上海机房;配置了一个开发环境的配置文件,还有一个本地运行使用的配置文件。
在读取配置文件的时候,通过系统变量进行选择某一个配置文件或者在部署脚本中将不同机房的配置文件按照部署的环境不同进行上传。

这样做的问题有:

实现复杂,需要在Java程序或者在部署脚本中进行处理

各个部署环境公用的配置要维护多份。例如需要新增一个和部署环境无关的配置项,需要在所有的配置文件中依次添加,稍有不慎就会造成部署失败。

下面介绍一种使用maven进行配置文件管理的方法,可以做到:

加载配置文件的过程对应用程序透明,不管在哪个环境中都只需要加载 config.properties

公共配置项在一个文件中维护

首先修改项目的config.properties,将需要根据运行环境不同取不同值的配置项目用变量代替,例如:

mysql.host = ${mysql.host}
mysql.port = ${mysql.port}

cache.size = 1000

然后在项目的根目录上创建一个 profiles 目录,存放所有运行环境的配置文件。

.
├── README.md
├── pom.xml
├── profiles
│   ├── beijing_config.properties
│   ├── shanghai_config.properties
│   └── dev_config.properties
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com

注意这里每个机房的配置文件中只包含需要根据运行环境不同取不同值的配置项:

$ cat profiles/beijing_config.properties
mysql.host = beijing.mysql.domain
mysql.port = 4534

$ cat profiles/shanghai_config.properties
mysql.host = shanghai.mysql.domain
mysql.port = 4534

$ cat profiles/dev_config.properties
mysql.host = test.mysql.host
mysql.port = 4534

最关键的部分是pom.xml的配置:



    4.0.0

    demo
    demo
    war
    1.0-SNAPSHOT
    
        UTF-8
        UTF-8
    

    ....

    
        
            dev
            
                true
            
            
                dev
            
        
        
            beijing
            
                beijing
            
        
        
            shanghai
            
                shanghai
            
        
    

    
        ...
        
            profiles/${build.profile.id}_config.properties
        
        
            
                src/main/resources/
                true
            
        
        ...
    

在这个pom文件中,我们首先定义了三个profile,dev profile 中将 build.profile.id 的值设置为 dev,beijing profile 中将 build.profile.id 的值设置为 beijing,shanghai profile 中将 build.profile.id 的值设置为 shanghai。
同时,这个配置中还指定了资源文件的位置是 src/main/resources/, 在生成这些资源文件的时候使用 profiles/${build.profile.id}_config.properties 中定义的变量进行内容的替换。

在打包的时候,如果我们执行:mvn package -P beijing , 这时首先会找到beijing的profile,将build.profile.id赋值为beijing,
这样定义变量的文件名就变成了 profiles/beijing_config.properties, 将config.properties 打入war包的时候会从 profiles/beijing_config.properties 中读取 ${mysql.host}${mysql.port} 的值。最后war包中的 config.properties
就变成了:

mysql.host = beijing.mysql.domain
mysql.port = 4534

cache.size = 1000

当没有指定 -P 选项的时候,由于 dev 这个环境配置了 true ,所以会被默认启用。

关于配置文件的读取,可以使用Owner减少代码量,并且支持动态加载。这里有一个简要的说明

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69863.html

相关文章

  • Maven管理SpringBoot Profile

    摘要:的配置文件默认为或,此外仅以配置为说明。的由的标签管理。管理由于构建是基于或,此处仅以说明。管理分五步,以下详细介绍。并且为表示,会将文件内容的替换为相应的变量如文件中的会替换为属性值。 1. Spring Profile Spring可使用Profile决定程序在不同环境下执行情况,包含配置、加载Bean、依赖等。 Spring的Profile一般项目包含:dev(开发), test...

    wenzi 评论0 收藏0
  • 开发者测试-采用精准测试工具对Spring Boot应用进行测试

    摘要:,整合刚才已经下载好了,现在我们添加文件标签加一行如下然后是和在文件中添加数据源配置连接本地,新建数据库,查询执行项目页面列出来的语句自动建立该项目需要的数据库内容。 简介:本文主要介绍把现今主流的springboot框架项目和精准测试工具进行结合和应用,通过精准测试的数据穿透、数据采集、测试用例与代码的双向追溯、数据分析等一系列精准测试的特有功能,达到对项目质量的保证。  本次环境搭...

    galois 评论0 收藏0
  • Maven核心概念和日常实践

    摘要:项目根目录项目名项目版本号项目目录打包的名字二依赖管理概述通过在配置依赖坐标,会自动帮我们下载依赖的构件。关于父模块的依赖配置注意两点一般都是通过来配置所有依赖及其版本号,然后子模块,在自己的文件中声明依赖即可,不用再指定版本,以确保统一。 一、Maven 1.1 为什么写Maven 工欲善其事,必先利其器。如今Java相关开发,基本离不开Maven、Gradle、MAT、Hudson...

    894974231 评论0 收藏0
  • Maven踩过的坑

    摘要:采用了一种被称之为概念来管理项目,所有的项目配置信息都被定义在一个叫做的文件中,通过该文件,可以管理项目的整个声明周期,包括编译,构建,测试,发布,报告等等。目前下绝大多数项目都已经采用进行管理。 前言:对于微软技术死忠的笔者来说,学习JAVA灵活又复杂的技术是件多么痛苦的事,开始想念我大微软简单的开发环境搭建以及完整详尽的开发文档,还有那一看就懂的案例教程了...可是为了工作,依旧不...

    cgspine 评论0 收藏0
  • Maven 项目构建基础

    摘要:项目构建基础从属于笔者的现代开发基础系列文章,介绍了的历史背景与多种构建工具对比,以及的基本配置安装与使用本文涉及的参考资料声明在学习与实践资料索引以及学习与资料索引。 Maven 项目构建基础从属于笔者的现代 Java 开发基础系列文章,介绍了 Maven 的历史背景与多种构建工具对比,以及 Maven 的基本配置安装与使用;本文涉及的参考资料声明在 Java 学习与实践资料索引以及...

    2501207950 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<