feat: add ClickHouse DataSource and JdbcTemplate configuration
Adds ClickHouseProperties (bound to clickhouse.*), ClickHouseConfig (conditional HikariDataSource + JdbcTemplate beans), and extends application.yml with clickhouse.enabled/url/username/password and cameleer.storage.metrics properties. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
|||||||
|
package com.cameleer3.server.app.config;
|
||||||
|
|
||||||
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableConfigurationProperties(ClickHouseProperties.class)
|
||||||
|
@ConditionalOnProperty(name = "clickhouse.enabled", havingValue = "true")
|
||||||
|
public class ClickHouseConfig {
|
||||||
|
|
||||||
|
@Bean(name = "clickHouseDataSource")
|
||||||
|
public DataSource clickHouseDataSource(ClickHouseProperties props) {
|
||||||
|
HikariDataSource ds = new HikariDataSource();
|
||||||
|
ds.setJdbcUrl(props.getUrl());
|
||||||
|
ds.setUsername(props.getUsername());
|
||||||
|
ds.setPassword(props.getPassword());
|
||||||
|
ds.setMaximumPoolSize(10);
|
||||||
|
ds.setPoolName("clickhouse-pool");
|
||||||
|
return ds;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "clickHouseJdbcTemplate")
|
||||||
|
public JdbcTemplate clickHouseJdbcTemplate(
|
||||||
|
@Qualifier("clickHouseDataSource") DataSource ds) {
|
||||||
|
return new JdbcTemplate(ds);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.cameleer3.server.app.config;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
|
@ConfigurationProperties(prefix = "clickhouse")
|
||||||
|
public class ClickHouseProperties {
|
||||||
|
|
||||||
|
private String url = "jdbc:clickhouse://localhost:8123/cameleer";
|
||||||
|
private String username = "default";
|
||||||
|
private String password = "";
|
||||||
|
|
||||||
|
public String getUrl() { return url; }
|
||||||
|
public void setUrl(String url) { this.url = url; }
|
||||||
|
|
||||||
|
public String getUsername() { return username; }
|
||||||
|
public void setUsername(String username) { this.username = username; }
|
||||||
|
|
||||||
|
public String getPassword() { return password; }
|
||||||
|
public void setPassword(String password) { this.password = password; }
|
||||||
|
}
|
||||||
@@ -48,6 +48,8 @@ opensearch:
|
|||||||
cameleer:
|
cameleer:
|
||||||
body-size-limit: ${CAMELEER_BODY_SIZE_LIMIT:16384}
|
body-size-limit: ${CAMELEER_BODY_SIZE_LIMIT:16384}
|
||||||
retention-days: ${CAMELEER_RETENTION_DAYS:30}
|
retention-days: ${CAMELEER_RETENTION_DAYS:30}
|
||||||
|
storage:
|
||||||
|
metrics: ${CAMELEER_STORAGE_METRICS:postgres}
|
||||||
|
|
||||||
security:
|
security:
|
||||||
access-token-expiry-ms: 3600000
|
access-token-expiry-ms: 3600000
|
||||||
@@ -66,6 +68,12 @@ springdoc:
|
|||||||
swagger-ui:
|
swagger-ui:
|
||||||
path: /api/v1/swagger-ui
|
path: /api/v1/swagger-ui
|
||||||
|
|
||||||
|
clickhouse:
|
||||||
|
enabled: ${CLICKHOUSE_ENABLED:false}
|
||||||
|
url: ${CLICKHOUSE_URL:jdbc:clickhouse://localhost:8123/cameleer?async_insert=1&wait_for_async_insert=0}
|
||||||
|
username: ${CLICKHOUSE_USERNAME:default}
|
||||||
|
password: ${CLICKHOUSE_PASSWORD:}
|
||||||
|
|
||||||
management:
|
management:
|
||||||
endpoints:
|
endpoints:
|
||||||
web:
|
web:
|
||||||
|
|||||||
Reference in New Issue
Block a user