diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java new file mode 100644 index 00000000..413102df --- /dev/null +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java @@ -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); + } +} diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseProperties.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseProperties.java new file mode 100644 index 00000000..461a8b42 --- /dev/null +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseProperties.java @@ -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; } +} diff --git a/cameleer3-server-app/src/main/resources/application.yml b/cameleer3-server-app/src/main/resources/application.yml index f15d93c9..145ca9be 100644 --- a/cameleer3-server-app/src/main/resources/application.yml +++ b/cameleer3-server-app/src/main/resources/application.yml @@ -48,6 +48,8 @@ opensearch: cameleer: body-size-limit: ${CAMELEER_BODY_SIZE_LIMIT:16384} retention-days: ${CAMELEER_RETENTION_DAYS:30} + storage: + metrics: ${CAMELEER_STORAGE_METRICS:postgres} security: access-token-expiry-ms: 3600000 @@ -66,6 +68,12 @@ springdoc: 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: endpoints: web: