如何为Spark Java提供动态数据库配置凭据?
我正在使用spark java构建一个简单的REST API。 该项目使用Postgres
DB存储, gradle
作为构建系统。 胖Jar部署在AWS
。
我有三个local
环境, staging
和production
环境。 对于每个胖子创建,我想提供特定的配置,如下面用于本地构建的配置:
dbHost = "localhost" dbUsername = "myusername" dbPassword = "mypassword" database = "mydb" dbPort = "5432"
如何基于fatJar构建变体动态提供这些值?
我曾经使用.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
在Amazon EBS中部署时,转到软件配置并为环境添加适当的环境变量(分段/生产)。
- 关于gradle依赖的未解决的参考?
- 在gradle-kotlin-dsl中的Android产品Flavors
- 配置编译器参数
- 包含gradle脚本kotlin文件的IntelliJ自动完成
- Android Studio版本3.0 Canary Channel不渲染支持库
- 使用Kotlin和Java编译器的Android项目需要很长时间才能编译 – 超过20分钟
- 在运行应用程序时,Intellij不包括对classpath的gradle依赖
- Gradle无法解析kotlin gradle插件1.1.1 – InvalidAlgorithmParameterException
- IntelliJ Idea for Kotlin @ConfigurationProperties类中不生成spring-configuration-metadata.json文件