feat: configure tdengine history datasource

This commit is contained in:
lingniu
2026-06-29 14:21:56 +08:00
parent 192f115176
commit 57ba7dca90
10 changed files with 184 additions and 1 deletions

View File

@@ -6,6 +6,8 @@ import com.lingniu.ingest.tdenginehistory.TdengineHistoryReader;
import com.lingniu.ingest.tdenginehistory.TdengineHistoryWriter;
import com.lingniu.ingest.tdenginehistory.TdengineJdbcHistoryReader;
import com.lingniu.ingest.tdenginehistory.TdengineJdbcHistoryWriter;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -39,6 +41,26 @@ public class TdengineHistoryAutoConfiguration {
return new TdengineHistoryStatements(schema);
}
@Bean
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(
prefix = "lingniu.ingest.tdengine-history",
name = "enabled",
havingValue = "true")
public DataSource tdengineDataSource(TdengineHistoryProperties properties) {
HikariConfig config = new HikariConfig();
config.setPoolName("tdengine-history");
config.setDriverClassName(properties.getDriverClassName());
config.setJdbcUrl(properties.getJdbcUrl());
config.setUsername(properties.getUsername());
config.setPassword(properties.getPassword());
config.setMaximumPoolSize(Math.max(1, properties.getMaximumPoolSize()));
config.setMinimumIdle(Math.max(0, Math.min(properties.getMinimumIdle(), properties.getMaximumPoolSize())));
config.setConnectionTimeout(Math.max(250, properties.getConnectionTimeoutMillis()));
config.setInitializationFailTimeout(properties.getInitializationFailTimeoutMillis());
return new HikariDataSource(config);
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(DataSource.class)

View File

@@ -15,6 +15,25 @@ public class TdengineHistoryProperties {
*/
private String database = "vehicle_history";
/**
* TDengine RESTful JDBC 地址。默认走 6041部署时可用 TDENGINE_JDBC_URL 覆盖。
*/
private String jdbcUrl;
private String username = "root";
private String password = "taosdata";
private String driverClassName = "com.taosdata.jdbc.rs.RestfulDriver";
private int maximumPoolSize = 16;
private int minimumIdle = 0;
private long connectionTimeoutMillis = 5000;
private long initializationFailTimeoutMillis = -1;
public boolean isEnabled() {
return enabled;
}
@@ -30,4 +49,71 @@ public class TdengineHistoryProperties {
public void setDatabase(String database) {
this.database = database;
}
public String getJdbcUrl() {
if (jdbcUrl == null || jdbcUrl.isBlank()) {
return "jdbc:TAOS-RS://127.0.0.1:6041/" + database;
}
return jdbcUrl;
}
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
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;
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public int getMaximumPoolSize() {
return maximumPoolSize;
}
public void setMaximumPoolSize(int maximumPoolSize) {
this.maximumPoolSize = maximumPoolSize;
}
public int getMinimumIdle() {
return minimumIdle;
}
public void setMinimumIdle(int minimumIdle) {
this.minimumIdle = minimumIdle;
}
public long getConnectionTimeoutMillis() {
return connectionTimeoutMillis;
}
public void setConnectionTimeoutMillis(long connectionTimeoutMillis) {
this.connectionTimeoutMillis = connectionTimeoutMillis;
}
public long getInitializationFailTimeoutMillis() {
return initializationFailTimeoutMillis;
}
public void setInitializationFailTimeoutMillis(long initializationFailTimeoutMillis) {
this.initializationFailTimeoutMillis = initializationFailTimeoutMillis;
}
}

View File

@@ -3,6 +3,7 @@ package com.lingniu.ingest.tdenginehistory.config;
import com.lingniu.ingest.tdenginehistory.TdengineHistorySchema;
import com.lingniu.ingest.tdenginehistory.TdengineHistoryReader;
import com.lingniu.ingest.tdenginehistory.TdengineHistoryWriter;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -21,6 +22,7 @@ class TdengineHistoryAutoConfigurationTest {
void staysOffByDefault() {
contextRunner.run(context -> {
assertThat(context).doesNotHaveBean(TdengineHistorySchema.class);
assertThat(context).doesNotHaveBean(DataSource.class);
assertThat(context.getBean(TdengineHistoryProperties.class).isEnabled()).isFalse();
});
}
@@ -53,4 +55,27 @@ class TdengineHistoryAutoConfigurationTest {
.withPropertyValues("lingniu.ingest.tdengine-history.enabled=true")
.run(context -> assertThat(context).hasSingleBean(TdengineHistoryReader.class));
}
@Test
void createsTdengineDataSourceWhenEnabled() {
contextRunner
.withPropertyValues(
"lingniu.ingest.tdengine-history.enabled=true",
"lingniu.ingest.tdengine-history.jdbc-url=jdbc:TAOS-RS://tdengine:6041/vehicle_history",
"lingniu.ingest.tdengine-history.username=root",
"lingniu.ingest.tdengine-history.password=secret",
"lingniu.ingest.tdengine-history.maximum-pool-size=24",
"lingniu.ingest.tdengine-history.minimum-idle=3",
"lingniu.ingest.tdengine-history.initialization-fail-timeout-millis=-1")
.run(context -> {
assertThat(context).hasSingleBean(DataSource.class);
HikariDataSource dataSource = context.getBean(HikariDataSource.class);
assertThat(dataSource.getJdbcUrl()).isEqualTo("jdbc:TAOS-RS://tdengine:6041/vehicle_history");
assertThat(dataSource.getUsername()).isEqualTo("root");
assertThat(dataSource.getMaximumPoolSize()).isEqualTo(24);
assertThat(dataSource.getMinimumIdle()).isEqualTo(3);
assertThat(context).hasSingleBean(TdengineHistoryWriter.class);
assertThat(context).hasSingleBean(TdengineHistoryReader.class);
});
}
}