【问题标题】:How to provide dynamic database configuration credentials for Spark Java?如何为 Spark Java 提供动态数据库配置凭据?
【发布时间】:2017-05-29 00:53:22
【问题描述】:

我正在使用 spark java 构建一个简单的 REST API。该项目使用Postgres DB 进行存储,gradle 作为构建系统。 fat Jar 部署在AWS

我有三个环境localstagingproduction。对于每个胖 jar 的创建,我想提供如下用于本地构建的特定配置:

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

如何根据 fatJar 构建变体动态提供这些值?

【问题讨论】:

  • 每个属性文件怎么样?例如config-local.propertiesconfig-production.properties
  • @k.liakos 感谢您的提示 :) 我已经按照相同的路径解决了这个问题。我在回答中给出了详细的解决方案。

标签: java gradle kotlin spark-java


【解决方案1】:

我使用 .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")
        )
    }

resources/develop.properties

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

在 Amazon EBS 中部署时,转到软件配置并添加适合环境的环境变量(暂存/生产)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多