Skip to content

Commit

Permalink
hikari: add setConfigInject before create datasource
Browse files Browse the repository at this point in the history
  • Loading branch information
ZenLiuCN committed Mar 13, 2020
1 parent 9707861 commit 8865c5d
Showing 1 changed file with 19 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ class Hikari private constructor() {
var url: String,
var username: String? = null,
var password: String? = null,
var driverClassName: String? = null,
var poolSize: Int = 1,
var cachePrepStmts: Boolean = true,
var prepStmtCacheSize: Int = 250,
Expand All @@ -85,24 +86,35 @@ class Hikari private constructor() {
var transactionIsolation: String? = null,
var registerMbeans: Boolean = false,
var minimumIdle: Int=1,
var dataSourceProperty:Map<String,Any>?=null,
var extra: MutableMap<String, HikariConf> = mutableMapOf()
)

/**
* HikariCP Datasource
*/
val datasource by lazy {
generateDatasource(this.config!!)
generateDatasource(null,this.config!!)
}
/**
* Other Datasource config by extra
*/
val other by lazy {
this.config!!.extra.map { (k, v) ->
k to lazy { generateDatasource(v) }
k to lazy { generateDatasource(k,v) }
}.toMap()
}
private fun generateDatasource(conf: HikariConf) = HikariDataSource(HikariConfig().apply {
private var configInject:(HikariConfig.(name:String?)->HikariConfig)?=null

/**
* set some inject function before create datasource
* @param ij [@kotlin.ExtensionFunctionType] Function2<HikariConfig, [@kotlin.ParameterName] String?, HikariConfig>
*/
fun setConfigInject(ij:HikariConfig.(name:String?)->HikariConfig){
configInject=ij
}
private fun generateDatasource(name:String?,conf: HikariConf) = HikariDataSource(HikariConfig().apply {
conf.driverClassName?.let{driverClassName=it}
jdbcUrl = conf.url
username=conf.username
isIsolateInternalQueries=conf.isolateInternalQueries
Expand Down Expand Up @@ -135,6 +147,9 @@ class Hikari private constructor() {
"prepStmtCacheSqlLimit",
conf.prepStmtCacheSqlLimit
)
})
conf.dataSourceProperty?.forEach { t, u ->
addDataSourceProperty(t,u)
}
}.let { configInject?.invoke(it,name)?:it })
}
}

0 comments on commit 8865c5d

Please sign in to comment.