1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package mobvista.dmp.utils.clickhouse
import java.util.Properties
import ru.yandex.clickhouse.ClickHouseDataSource
import ru.yandex.clickhouse.settings.ClickHouseProperties
/**
* @package: mobvista.dmp.utils.clickhouse
* @author: wangjf
* @date: 2019-07-16
* @time: 18:28
* @email: jinfeng.wang@mobvista.com
* @phone: 152-1062-7698
*/
object ClickHouseConnectionFactory extends Serializable {
private val dataSources = scala.collection.mutable.Map[(String, Int), ClickHouseDataSource]()
def get(host: String, port: Int = 8123): ClickHouseDataSource = {
dataSources.get((host, port)) match {
case Some(ds) =>
ds
case None =>
val ds = createDatasource(host, port = port)
dataSources += ((host, port) -> ds)
ds
}
}
private def createDatasource(host: String, dbO: Option[String] = None, port: Int = 8123) = {
val props = new Properties()
props.setProperty("socket_timeout", "600000")
props.setProperty("connection_timeout","600000")
dbO map { db => props.setProperty("database", db) }
val clickHouseProps = new ClickHouseProperties(props)
new ClickHouseDataSource(s"jdbc:clickhouse://$host:$port", clickHouseProps)
}
}