package ru.yandex.market.graphouse.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import ru.yandex.clickhouse.ClickHouseDataSource;
import ru.yandex.clickhouse.settings.ClickHouseProperties;
import java.util.concurrent.TimeUnit;
/**
* @author Vlad Vinogradov <a href="mailto:vladvin@yandex-team.ru"></a>
* @date 10.11.16
*/
@Configuration
public class DbConfig {
@Value("${graphouse.clickhouse.host}")
private String clickhouseHost;
@Value("${graphouse.clickhouse.port}")
private String clickhousePort;
@Value("${graphouse.clickhouse.db}")
private String clickhouseDatabase;
@Value("${graphouse.clickhouse.user}")
private String clickhouseUsername;
@Value("${graphouse.clickhouse.password}")
private String clickhousePassword;
@Value("${graphouse.clickhouse.socket-timeout-seconds}")
private int clickhouseSocketTimeoutSeconds;
@Value("${graphouse.clickhouse.query-timeout-seconds}")
private int clickhouseQueryTimeoutSeconds;
@Value("${graphouse.autohide.clickhouse.query-timeout-seconds}")
private int clickhouseAutohideQueryTimeoutSeconds;
@Value("${graphouse.clickhouse.compress}")
private boolean compress;
@Bean
public ClickHouseDataSource clickHouseDataSource() {
final String url = "jdbc:clickhouse://" + clickhouseHost + ":" + clickhousePort + "/" + clickhouseDatabase;
final ClickHouseProperties clickHouseProperties = new ClickHouseProperties();
clickHouseProperties.setSocketTimeout((int) TimeUnit.SECONDS.toMillis(clickhouseSocketTimeoutSeconds));
clickHouseProperties.setUser(clickhouseUsername);
clickHouseProperties.setPassword(clickhousePassword);
clickHouseProperties.setCompress(compress);
clickHouseProperties.setDecompress(compress);
return new ClickHouseDataSource(url, clickHouseProperties);
}
@Bean
public JdbcTemplate clickHouseJdbcTemplate(ClickHouseDataSource clickHouseDataSource) {
final JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(clickHouseDataSource);
jdbcTemplate.setQueryTimeout(clickhouseQueryTimeoutSeconds);
return jdbcTemplate;
}
@Bean
public JdbcTemplate clickHouseJdbcTemplateAutohide(ClickHouseDataSource clickHouseDataSource) {
final JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(clickHouseDataSource);
jdbcTemplate.setQueryTimeout(clickhouseAutohideQueryTimeoutSeconds);
return jdbcTemplate;
}
@Bean
public NamedParameterJdbcTemplate clickHouseNamedJdbcTemplate(ClickHouseDataSource clickHouseDataSource) {
return new NamedParameterJdbcTemplate(clickHouseDataSource);
}
}