feat: configure tdengine history datasource
This commit is contained in:
@@ -24,6 +24,14 @@
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-autoconfigure</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.taosdata.jdbc</groupId>
|
||||
<artifactId>taos-jdbcdriver</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.zaxxer</groupId>
|
||||
<artifactId>HikariCP</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user