用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/navikt/sokos-ske-krav --skill kotlin-app-config命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Flyway-migrasjoner for PostgreSQL: navnekonvensjoner (V{n}__desc.sql), skjema for krav/feilmelding/filvalideringsfeil, DBListener-testing med TestContainers
Post-send livssyklus: StatusService poller /mottaksstatus; StoppKravService; RapportService + AvstemmingRouting-frontend for manuell reskontroføring
SlackService feilakkumulering og Tags-basert varsling for prosesseringsfeil i SKE-batch
正在显示 SKILL.md
| name | kotlin-app-config |
| description | HOCON-basert konfigurasjon med PropertiesConfig singleton for Ktor batch-tjenester på NAIS (FSS) |
This skill describes the HOCON + PropertiesConfig singleton pattern used in this project.
Config is loaded from a HOCON file via Ktor's ApplicationConfig API.
PropertiesConfig is a Kotlin object that holds all typed config sections as lazy properties.
Call PropertiesConfig.load(config) once at startup; never re-initialize.
object PropertiesConfig {
lateinit var config: ApplicationConfig
private set
val isLocal: Boolean
get() = applicationProperties.isLocal
val applicationProperties by lazy {
config.property("application").getAs<ApplicationProperties>()
}
val postgresConfig by lazy {
config.property("postgres").getAs<PostgresConfig>()
}
val sftpProperties by lazy {
config.property("sftp").getAs<SftpProperties>()
}
val maskinportenClientProperties by lazy {
config.property("maskinportenClient").getAs<MaskinportenClientConfig>()
}
val circuitBreakerConfig by lazy {
config.property("circuitBreaker").getAs<CircuitBreakerConfig>()
}
val timerConfig by lazy {
config.property("timer").getAs<TimerConfig>()
}
fun load(applicationConfig: ApplicationConfig) {
if (!::config.isInitialized) {
config = applicationConfig
}
}
}
private fun Application.module() {
PropertiesConfig.load(loadConfig())
if (!PropertiesConfig.isLocal) {
PostgresDataSource.migrate()
}
if (!timerConfig.useTimer) return
launchJob(skeService::handleNewKrav, timerConfig.schedulerIntervalPeriod)
}
loadConfig()) and example HOCON config files.@Serializable) and testing configuration with MockK.@Serializable data class properties with compile-time field names