一般来说InfluxDB多台主机的可能性很小,主要还是同一台主机不同数据库(database),这里介绍一种方式能够动态配置数据库,也可以设置不同主机等信息。
先看配置文件:
influxdb:
host1: http://localhost:8086
host2: http://localhost:8086
database1: test1
database2: test2
InfluxDB设置:
package com.test.influx;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.BatchPoints;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import java.util.concurrent.TimeUnit;
/**
* @author Created by pangkunkun on 2018/4/18.
*/
@SpringBootApplication
public class InfluxApplication {
@Value("${influxdb.host1}")
private String host1;
@Value("${influxdb.host2}")
private String host2;
@Value("${influxdb.database1}")
private String database1;
@Value("${influxdb.database2}")
private String database2;
public static void main(String[] args) {
SpringApplication.run(InfluxApplication.class,args);
}
@Bean(name = "1")
public InfluxDB influxDB1(){
InfluxDB influxDB = InfluxDBFactory.connect(host1);
influxDB.setDatabase(database1)
.enableBatch(20,200, TimeUnit.MILLISECONDS);
return influxDB;
}
@Bean(name = "2")
public InfluxDB influxDB2(){
InfluxDB influxDB = InfluxDBFactory.connect(host2);
influxDB.setDatabase(database2)
.enableBatch(20,200, TimeUnit.MILLISECONDS);
return influxDB;
}
}
具体使用:
package com.test.influx;
import org.influxdb.InfluxDB;
import org.influxdb.dto.BatchPoints;
import org.influxdb.dto.Point;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
/**
* @author Created by pangkunkun on 2018/4/18.
*/
@Component
public class InfluxBatch implements CommandLineRunner{
@Resource(name = "1")
private InfluxDB influxDB1;
@Resource(name = "2")
private InfluxDB influxDB2;
@Override
public void run(String... args) throws Exception{
Point point = Point.measurement("test")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.addField("value",1)
.tag("name","test1")
.build();
influxDB1.write(point);
Point point2 = Point.measurement("test")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.addField("value",2)
.tag("name","test2")
.build();
influxDB2.write(point2);
}
}
在InfluxDB的bean设置的时候可以设置保留策略等信息,这个自己动手查看下就知道了。