如何在Ktor项目中读取properties文件配置连接PostgreSQL
Ktor项目安全配置PostgreSQL数据库(避免凭证暴露)
我基于Ktor搭建了一个项目,需要配置PostgreSQL数据库连接,但希望绝对避免凭证暴露。目前找到的两种方案都不符合预期:
- 硬编码凭证,示例代码如下:
val database = Database.connect( url = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", user = "root", driver = "org.h2.Driver", password = "", )
- 直接依赖系统环境变量
我想采用更安全的方式:通过.properties文件加载配置,同时希望application.yaml能通过占位符引用环境变量,格式如下:
postgres: url: $POSTGRES_URL user: $POSTGRES_USER password: $POSTGRES_PASSWORD
虽然可以把凭证硬编码进配置文件再添加到.gitignore,但根据官方文档的建议,应该使用环境变量,所以认为这种方式并不合适。
已尝试的操作
- 在项目根目录创建了
development.properties和production.properties文件,内容如下:
POSTGRES_URL= POSTGRES_USER= POSTGRES_PASSWORD=
- 在
Databases.kt中尝试读取这些配置值,但所有获取结果都是null:
fun Application.configureDatabases() { val properties = Properties() val propertiesFile = File("development.properties") if (!propertiesFile.exists()) { throw FileNotFoundException("Postgres configuration file not found") } val url = properties.getProperty("POSTGRES_URL") val user = properties.getProperty("POSTGRES_USER") val password = properties.getProperty("POSTGRES_PASSWORD") println(url) println(user) println(password) // val database = // Database.connect( // url, // user = user, // driver = "org.h2.Driver", // password = password // ) }
内容的提问来源于stack exchange,提问作者ImEmo
相关产品推荐
相关产品推荐

