#1
This guide shows how to combine ClickHouse, TimescaleDB, and PostgreSQL in a Spring Boot app for hybrid analytics.

1. Configure Multiple DataSources

In application.yml:
spring:
  datasource:
    clickhouse:
      url: jdbc:clickhouse://localhost:8123/default
      driver-class-name: com.clickhouse.jdbc.ClickHouseDriver
    timescale:
      url: jdbc:postgresql://localhost:5432/timescale
      driver-class-name: org.postgresql.Driver
    postgres:
      url: jdbc:postgresql://localhost:5432/postgres
      driver-class-name: org.postgresql.Driver

2. Define Configurations

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties("spring.datasource.clickhouse")
    public DataSource clickHouseDataSource() { return DataSourceBuilder.create().build(); }

    @Bean
    @ConfigurationProperties("spring.datasource.timescale")
    public DataSource timescaleDataSource() { return DataSourceBuilder.create().build(); }

    @Bean
    @ConfigurationProperties("spring.datasource.postgres")
    public DataSource postgresDataSource() { return DataSourceBuilder.create().build(); }
}

3. Query Each Database

@Autowired JdbcTemplate clickhouseJdbc;
@Autowired JdbcTemplate timescaleJdbc;
@Autowired JdbcTemplate postgresJdbc;
Fetch data from each:
List<Map<String, Object>> metrics = clickhouseJdbc.queryForList("SELECT * FROM events LIMIT 10");
List<Map<String, Object>> series = timescaleJdbc.queryForList("SELECT * FROM metrics LIMIT 10");
List<Map<String, Object>> users = postgresJdbc.queryForList("SELECT * FROM users LIMIT 10");

4. Combine Results

Merge results into one DTO for hybrid analytics:
public record HybridReport(Object events, Object series, Object users) {}
Return them through a REST endpoint.

5. Expose Hybrid Analytics API

@RestController
@RequestMapping("/analytics")
public class AnalyticsController {
    @GetMapping("/hybrid")
    public HybridReport getHybrid() {
        return new HybridReport(metrics, series, users);
    }
}

image quote pre code