文档首页/
云数据库 GeminiDB/
GeminiDB Influx接口/
用户指南/
实例连接及管理/
程序代码连接GeminiDB Influx实例/
通过Java语言连接GeminiDB Influx实例
更新时间:2025-04-25 GMT+08:00
通过Java语言连接GeminiDB Influx实例
本章节介绍了通过Java语言连接GeminiDB Influx实例的方法。
pom文件依赖
<dependency> <groupId>org.influxdb</groupId> <artifactId>influxdb-java</artifactId> <version>2.21</version> </dependency>
package influxdb;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.SSLContext;
import okhttp3.OkHttpClient;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
import org.apache.http.ssl.SSLContexts;
import javax.net.ssl.*;
public class demo {
public static void main(String[] args) {
OkHttpClient.Builder client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.retryOnConnectionFailure(true);
client.sslSocketFactory(defaultSslSocketFactory(), defaultTrustManager());
client.hostnameVerifier(noopHostnameVerifier());
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全;
// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
String username = System.getenv("EXAMPLE_USERNAME_ENV");
String password = System.getenv("EXAMPLE_PASSWORD_ENV");
final String serverURL = "https://127.0.0.1:8086", username = username, password = password;
InfluxDB influxdb = InfluxDBFactory.connect(serverURL, username, password, client);
// Create a database...
String databaseName = "foo";
influxdb.query(new Query("CREATE DATABASE " + databaseName, databaseName));
influxdb.setDatabase(databaseName);
// Write points to influxdb.
influxdb.write(Point.measurement("bar")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.tag("location", "chengdu")
.addField("temperature", 22)
.build());
// Query your data using InfluxQL.
QueryResult queryResult = influxdb.query(new Query("SELECT * FROM bar", databaseName));
// Close it if your application is terminating or you are not using it anymore.
influxdb.close();
}
private static X509TrustManager defaultTrustManager() {
return new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
};
}
private static SSLSocketFactory defaultSslSocketFactory() {
try {
SSLContext sslContext = SSLContexts.createDefault();
sslContext.init(null, new TrustManager[] {
defaultTrustManager()
}, new SecureRandom());
return sslContext.getSocketFactory();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static HostnameVerifier noopHostnameVerifier() {
return new HostnameVerifier() {
@Override
public boolean verify(final String s, final SSLSession sslSession) {
return true;//true 表示使用ssl方式,但是不校验ssl证书,建议使用这种方式
}
};
}
}
package influxdb;
import okhttp3.OkHttpClient;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
import java.util.concurrent.TimeUnit;
public class demoNoSSL {
public static void main(String[] args) {
OkHttpClient.Builder client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.retryOnConnectionFailure(true);
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全;
// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
String username = System.getenv("EXAMPLE_USERNAME_ENV");
String password = System.getenv("EXAMPLE_PASSWORD_ENV");
final String serverURL = "http://127.0.0.1:8086", username = username, password = password;
InfluxDB influxdb = InfluxDBFactory.connect(serverURL, username, password, client);
// Create a database...
String databaseName = "foo";
influxdb.query(new Query("CREATE DATABASE " + databaseName, databaseName));
influxdb.setDatabase(databaseName);
// Write points to influxdb.
influxdb.write(Point.measurement("bar")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.tag("location", "chengdu")
.addField("temperature", 22)
.build());
// Query your data using InfluxQL.
QueryResult queryResult = influxdb.query(new Query("SELECT * FROM bar", databaseName));
// Close it if your application is terminating or you are not using it anymore.
influxdb.close();
}
}
package influxdb;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
import java.util.concurrent.TimeUnit;
public class demoConnectionPool {
public static void main(String[] args) {
// 客户端连接池功能基于OkHttpClient实现
OkHttpClient.Builder client = new OkHttpClient().newBuilder();
client.connectTimeout(10, TimeUnit.SECONDS);
client.readTimeout(10, TimeUnit.SECONDS);
client.writeTimeout(10, TimeUnit.SECONDS);
// 建议设为true,屏蔽部分连接错误,并自动进行重试
client.retryOnConnectionFailure(true);
// maxIdleConnections指连接池最多维护的未使用的Idle连接数量,默认值是5
// 超过阈值的idle连接会由连接池关闭,关闭后sockets进入TIME_WAIT状态等待系统回收,该参数需根据实际连接数适当调整
client.connectionPool(new ConnectionPool(5, 30, TimeUnit.SECONDS));
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全;
// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
String username = System.getenv("EXAMPLE_USERNAME_ENV");
String password = System.getenv("EXAMPLE_PASSWORD_ENV");
final String serverURL = "http://127.0.0.1:8086", username = username, password = password;
InfluxDB influxdb = InfluxDBFactory.connect(serverURL, username, password, client);
// Create a database...
String databaseName = "foo";
influxdb.query(new Query("CREATE DATABASE " + databaseName, databaseName));
influxdb.setDatabase(databaseName);
// Write points to influxdb.
influxdb.write(Point.measurement("bar")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.tag("location", "chengdu")
.addField("temperature", 22)
.build());
// Query your data using InfluxQL.
QueryResult queryResult = influxdb.query(new Query("SELECT * FROM bar", databaseName));
// Close it if your application is terminating or you are not using it anymore.
influxdb.close();
}
}
/**
使用场景:
* 当采用ELB连接的时候,客户端一次性发送很多次查询请求。
* 如果采用http长连接,会导致大部分查询请求打到一个InfluxDB节点上,导致负载不均衡。
此时采用http短连接(设置请求头中:Connection=close)可以解决这一问题,实现InfluxDB各节点负载均衡。
*/
/**
此方式只展示部分代码
*/
OkHttpClient.Builder client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.addNetworkInterceptor(chain -> {
Request newRequest = chain.request().newBuilder().header("Connection", "close").build();
return chain.proceed(newRequest);
});