2017-05-13 49 views
0

我正在使用spark java構建一個簡單的REST API。該項目使用Postgres DB存儲,gradle作爲構建系統。脂肪罐部署在AWS如何爲Spark Java提供動態數據庫配置憑據?

我有三個環境local,staging & production。對於每個脂肪罐子創作,我想提供像下面一個用於本地具體配置構建:

dbHost = "localhost" 
    dbUsername = "myusername" 
    dbPassword = "mypassword" 
    database = "mydb" 
    dbPort = "5432" 

如何動態地提供基於fatJar這些價值觀建立變異?

+1

每個屬性文件如何?例如'config-local.properties','config-production.properties'等 –

+0

@ k.liakos感謝您的提示:)我已經通過遵循相同的路徑解決了問題。我在答案中給出了詳細的解決方案。 – blizzard

回答

0

我使用.properties文件來關注此示例github項目Kotlin-dev-proxy

服務器讀取名爲app_environment的環境變量並使用相應的資源文件。

示例代碼:

DbConfig.kt

data class DbConfig(
     val dbHost: String, 
     val dbUsername: String, 
     val dbPassword: String, 
     val dbName: String, 
     val dbPort: Int) 

ServerSettings.kt

class ServerSettings(settings: String) { 
    val resources = Properties() 

    init { 
     val fileUrl: URL = resources.javaClass.getResource("/$settings.properties") 
       ?: throw FileNotFoundException("$settings.properties file not found") 
     fileUrl.openStream().use { resources.load(it) } 
    } 

    fun printSettings() = resources.stringPropertyNames().forEach { 
     println("Property: $it has value: '${resources[it]}'") 
    } 

    fun getString(key: String): String = resources[key]!! as String 

    fun getInt(key: String): Int = (resources[key]!! as String).toInt() 
} 

DbConfig.kt

fun provideDbConfig(): DbConfig { 
     val settings = ServerSettings(System.getenv("app_environment")) 
     settings.printSettings() 

     return DbConfig(
       dbHost = settings.getString("dbHost"), 
       dbUsername = settings.getString("dbUsername"), 
       dbPassword = settings.getString("dbPassword"), 
       dbName = settings.getString("dbName"), 
       dbPort = settings.getInt("dbPort") 
     ) 
    } 

資源/ develop.properties

# Local Db values 
dbHost=localhost 
dbUsername=postgresusername 
dbPassword=postgrespassword 
dbName=mydbname 
dbPort=5432 

在部署在亞馬遜EBS,轉到軟件配置和環境中添加環境變量合適的(切入/生產)。

相關問題