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 解決不同環境配置文件的方法,可以由此下載 相關文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM