Gradle实战系列(二)__自动替换的配置文件

项目开发过程中,通常程序在开发-测试-上线三个阶段部署在三个不同的环境,例如连接数据库的服务器 IP 及帐号密码不同,调用的外部服务指向不同服务器。针对不同环境使用不同配置文件的问题,主要可以有两种解决方案:

占位符替换

首先建立资源文件夹

mkdir src\main\resources

在 resources 路径下建立 jdbc.properties 文件

jdbc.url=@jdbc.url@
jdbc.user=@jdbc.user@
jdbc.password=@jdbc.password@

接着利用 Groovy 的语法在工程文件夹中建立 config.groovy 的配置文件,对应前面建立的 jdbc.properties 文件,分别配置开发/测试/生产这三个环境的 jdbc 参数

environments {
    dev {
        jdbc {
            url = 'dev_ip'
            user = 'dev_user'
            password = 'dev_pwd'
        }
    }

    test {
        jdbc {
            url = 'test_ip'
            user = 'test_user'
            password = 'test_pwd'
        }
    }

    prd {
        jdbc {
            url = 'prd_ip'
            user = 'prd_user'
            password = 'prd_pwd'
        }
    }
}

由于 Gradle 在执行脚本时,可以利用 -P 传入参数的方式来区分不同的环境,所以我们可以在 build.gradle 里面加上 ext 属性块,从传入的参数来改变预设的 profile 属性,假设这里透过传入 env 参数来决定当前要建构的环境

ext {
    profile = project['env']
}

另外在自定义一个函数,根据 profile 来读取前面建立的 config.groovy 文件

def loadGroovyConfig(){
    def configFile = file('config.groovy')
    new ConfigSlurper(profile).parse(configFile.toURL()).toProperties()
}

接着改变 processResources task,将资源文件夹中的配置文件,根据 config.groovy 文件的内容来替换占位符

processResources {
    from(sourceSets.main.resources.srcDirs) {
        filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: loadGroovyConfig())
    }
}

在执行建构脚本时,将 env 参数传入

gradle clean build -Penv=dev

执行成功后可以在 build\resources\main 这个路径看到已经替换好的 jdbc.properties 文件,并且也会被打包进 jar 包中

jdbc.url=dev_ip
jdbc.user=dev_user
jdbc.password=dev_pwd

改变资源文件夹路径

假设在项目中的配置文件除了 properties 文件之外,还会有 xml 文件,首先在 config 文件夹中建立不同环境不同类型的配置文件路径

mkdir config\properties\dev
mkdir config\properties\test
mkdir config\properties\prd
mkdir config\xml\dev
mkdir config\xml\test
mkdir config\xml\prd

并且将不同环境的配置文件都放置在对应的文件夹之下

[gradle_sample]
---[.gradle]
   ---内容省略

---[build]
   ---内容省略

---[config]
   ---[properties]
      ---[dev]
         ---jdbc.properties
      
      ---[prd]
         ---jdbc.properties
      
      ---[test]
          ---jdbc.properties
   
   ---[xml]
      ---[dev]
         ---applicationContext.xml
      
      ---[prd]
         ---applicationContext.xml
      
      ---[test]
          ---applicationContext.xml

---[gradle]
   ---内容省略

---build.gradle
---gradlew
---gradlew.bat
---settings.gradle

接着修改 build.gradle 里面的 sourceSets 属性块

sourceSets {
    main {
        resources {
            srcDir "config/properties/${profile}", "config/xml/${profile}"
        }
    }
}

最后一样在执行建构脚本时,就可以看到从对应 env 参数的 config 路径下被复制过来到 在 build\resources\main 里面的 jdbc.properties 文件和 applicationContext.xml 文件
以上是本文对 Gradle 解决不同环境配置文件的方法,可以由此下载 相关文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值