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) } }