Load configuration with micronaut
This commit is contained in:
@@ -1,8 +1,12 @@
|
||||
package be.simplenotes.config
|
||||
|
||||
import io.micronaut.context.annotation.ConfigurationInject
|
||||
import io.micronaut.context.annotation.ConfigurationProperties
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Singleton
|
||||
|
||||
data class DataSourceConfig(
|
||||
@ConfigurationProperties("db")
|
||||
data class DataSourceConfig @ConfigurationInject constructor(
|
||||
val jdbcUrl: String,
|
||||
val driverClassName: String,
|
||||
val username: String,
|
||||
@@ -14,7 +18,8 @@ data class DataSourceConfig(
|
||||
"username='$username', password='***', maximumPoolSize=$maximumPoolSize, connectionTimeout=$connectionTimeout)"
|
||||
}
|
||||
|
||||
data class JwtConfig(
|
||||
@ConfigurationProperties("jwt")
|
||||
data class JwtConfig @ConfigurationInject constructor(
|
||||
val secret: String,
|
||||
val validity: Long,
|
||||
val timeUnit: TimeUnit,
|
||||
@@ -22,7 +27,8 @@ data class JwtConfig(
|
||||
override fun toString() = "JwtConfig(secret='***', validity=$validity, timeUnit=$timeUnit)"
|
||||
}
|
||||
|
||||
data class ServerConfig(
|
||||
@ConfigurationProperties("server")
|
||||
data class ServerConfig @ConfigurationInject constructor(
|
||||
val host: String,
|
||||
val port: Int,
|
||||
)
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
package be.simplenotes.config
|
||||
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class ConfigLoader {
|
||||
//region Config loading
|
||||
private val properties: Properties = javaClass
|
||||
.getResource("/application.properties")
|
||||
.openStream()
|
||||
.use {
|
||||
Properties().apply { load(it) }
|
||||
}
|
||||
|
||||
private val env = System.getenv()
|
||||
|
||||
private fun value(key: String): String =
|
||||
env[key.toUpperCase().replace(".", "_")]
|
||||
?: properties.getProperty(key)
|
||||
?: error("Missing config key $key")
|
||||
//endregion
|
||||
|
||||
val jwtConfig
|
||||
get() = JwtConfig(
|
||||
secret = value("jwt.secret"),
|
||||
validity = value("jwt.validity").toLong(),
|
||||
timeUnit = TimeUnit.HOURS,
|
||||
)
|
||||
|
||||
val dataSourceConfig
|
||||
get() = DataSourceConfig(
|
||||
jdbcUrl = value("jdbcUrl"),
|
||||
driverClassName = value("driverClassName"),
|
||||
username = value("username"),
|
||||
password = value("password"),
|
||||
maximumPoolSize = value("maximumPoolSize").toInt(),
|
||||
connectionTimeout = value("connectionTimeout").toLong()
|
||||
)
|
||||
|
||||
val serverConfig
|
||||
get() = ServerConfig(
|
||||
host = value("host"),
|
||||
port = value("port").toInt(),
|
||||
)
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package be.simplenotes.config
|
||||
|
||||
import io.micronaut.context.annotation.Factory
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Factory
|
||||
class ConfigModule {
|
||||
|
||||
@Singleton
|
||||
internal fun dataSourceConfig(configLoader: ConfigLoader) = configLoader.dataSourceConfig
|
||||
|
||||
@Singleton
|
||||
internal fun jwtConfig(configLoader: ConfigLoader) = configLoader.jwtConfig
|
||||
|
||||
@Singleton
|
||||
internal fun serverConfig(configLoader: ConfigLoader) = configLoader.serverConfig
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
host=localhost
|
||||
port=8080
|
||||
#
|
||||
jdbcUrl=jdbc:h2:./notes-db;
|
||||
driverClassName=org.h2.Driver
|
||||
username=h2
|
||||
password=
|
||||
maximumPoolSize=10
|
||||
connectionTimeout=3000
|
||||
#
|
||||
jwt.secret=PliLvfk7l4WF+cZJk66LR5Mpnh+ocbvJ2wfUCK2UCms=
|
||||
jwt.validity=24
|
||||
@@ -0,0 +1,16 @@
|
||||
db:
|
||||
jdbc-url: jdbc:h2:./notes-db;
|
||||
driver-class-name: org.h2.Driver
|
||||
username: h2
|
||||
password: ''
|
||||
connection-timeout: 3000
|
||||
maximum-pool-size: 10
|
||||
|
||||
jwt:
|
||||
secret: 'PliLvfk7l4WF+cZJk66LR5Mpnh+ocbvJ2wfUCK2UCms='
|
||||
validity: 24
|
||||
time-unit: hours
|
||||
|
||||
server:
|
||||
host: localhost
|
||||
port: 8080
|
||||
Reference in New Issue
Block a user