viralshah
05/27/2020, 2:24 AM@Configuration
class DataSourceConfig {
companion object {
private val logger = LoggerFactory.getLogger(DataSourceConfig::class.java)
}
@ConstructorBinding
@ConfigurationProperties(prefix = "datasource.default")
data class DefaultDataSource(
val host: String,
val port: Int,
val database: String,
val username: String,
val password: String
) {
init {
<http://logger.info|logger.info>(toString())
}
}
@ConstructorBinding
@ConfigurationProperties(prefix = "datasource.write")
data class WriteDataSource(
val host: String,
val port: Int,
val database: String,
val username: String,
val password: String
) {
init {
<http://logger.info|logger.info>(toString())
}
}
@Bean
fun defaultFactory(defaultDataSource: DefaultDataSource): ConnectionFactory {
return ConnectionFactories.get(
ConnectionFactoryOptions.builder()
.option(ConnectionFactoryOptions.DRIVER, "pool")
.option(ConnectionFactoryOptions.PROTOCOL, "postgresql")
.option(ConnectionFactoryOptions.HOST, defaultDataSource.host)
.option(ConnectionFactoryOptions.PORT, defaultDataSource.port)
.option(ConnectionFactoryOptions.USER, defaultDataSource.username)
.option(ConnectionFactoryOptions.PASSWORD, defaultDataSource.password)
.option(ConnectionFactoryOptions.DATABASE, defaultDataSource.database)
.build()
)
}
@Bean
fun writeFactory(writeDataSource: WriteDataSource): ConnectionFactory {
return ConnectionFactories.get(
ConnectionFactoryOptions.builder()
.option(ConnectionFactoryOptions.DRIVER, "pool")
.option(
ConnectionFactoryOptions.PROTOCOL,
"postgresql"
)
.option(ConnectionFactoryOptions.HOST, writeDataSource.host)
.option(ConnectionFactoryOptions.PORT, writeDataSource.port)
.option(ConnectionFactoryOptions.USER, writeDataSource.username)
.option(ConnectionFactoryOptions.PASSWORD, writeDataSource.password)
.option(ConnectionFactoryOptions.DATABASE, writeDataSource.database)
.build()
)
}
@Bean
@Primary
fun databaseClient(@Qualifier("defaultFactory") connectionFactory: ConnectionFactory) =
DatabaseClient.create(connectionFactory)
@Bean
fun writeDatabaseClient(@Qualifier("writeFactory") connectionFactory: ConnectionFactory) =
DatabaseClient.create(connectionFactory)
}
Can I clean this up into something that scales when I need to coneect to multiple dbsThiago Nerys
05/27/2020, 2:35 AMdata class DataSource
Thiago Nerys
05/27/2020, 2:53 AMviralshah
05/27/2020, 3:25 AMThiago Nerys
05/27/2020, 3:32 AMviralshah
05/27/2020, 3:46 AM@Configuration
class DataSourceConfig {
companion object {
private val logger = LoggerFactory.getLogger(DataSourceConfig::class.java)
}
@ConstructorBinding
@ConfigurationProperties(prefix = "datasource.default")
data class DefaultDataSource(
val url: String,
val username: String,
val password: String
) {
init {
<http://logger.info|logger.info>(toString())
}
}
@ConstructorBinding
@ConfigurationProperties(prefix = "datasource.write")
data class WriteDataSource(
val url: String,
val username: String,
val password: String
) {
init {
<http://logger.info|logger.info>(toString())
}
}
@Bean
fun defaultFactory(defaultDataSource: DefaultDataSource): ConnectionFactory {
return ConnectionFactories.get(ConnectionFactoryOptions
.parse(defaultDataSource.url)
.mutate()
.option(ConnectionFactoryOptions.USER, defaultDataSource.username)
.option(ConnectionFactoryOptions.PASSWORD, defaultDataSource.password)
.build())
}
@Bean
fun writeFactory(writeDataSource: WriteDataSource): ConnectionFactory {
return ConnectionFactories.get(ConnectionFactoryOptions
.parse(writeDataSource.url)
.mutate()
.option(ConnectionFactoryOptions.USER, writeDataSource.username)
.option(ConnectionFactoryOptions.PASSWORD, writeDataSource.password)
.build())
}
@Bean
@Primary
fun databaseClient(@Qualifier("defaultFactory") connectionFactory: ConnectionFactory) =
DatabaseClient.create(connectionFactory)
@Bean
fun writeDatabaseClient(@Qualifier("writeFactory") connectionFactory: ConnectionFactory) =
DatabaseClient.create(connectionFactory)
This is what I haveThiago Nerys
05/27/2020, 3:48 AMThiago Nerys
05/27/2020, 3:48 AMusername:password@host
viralshah
05/27/2020, 3:49 AMThiago Nerys
05/27/2020, 3:51 AMviralshah
05/27/2020, 3:52 AMThiago Nerys
05/27/2020, 3:54 AMviralshah
05/27/2020, 3:54 AM