influxDB増加

1は、POMファイルが追加されます

<親> 
<たartifactId> MA-ベース</たartifactId>
<groupIdを> COM ... </ groupIdを>
<バージョン> 5.0.0-SNAPSHOT </バージョン>
</親>
添加依赖
<依存性> 
<のgroupId> org.influxdb </のgroupId>
<たartifactId> influxdb-のJava </たartifactId>
<バージョン> 2.15 </バージョン>
</依存>

2、influxDB工具类
パッケージcom.meicloud.mp.mas.core.influx。

輸入lombok.extern.slf4j.Slf4j。
輸入org.springframework.beans.factory.InitializingBean。
輸入org.springframework.beans.factory.annotation.Value。
輸入org.springframework.stereotype.Component。

@ SLF4J
@Component
パブリッククラスInfluxDBUtilsはInitializingBean {実装

プライベート静的InfluxDBConnect influxDBを。

@value( "$ {common.mas.influx.url}")
プライベート文字列のOpenURL = "http://127.0.0.1:8086";//连接地址

@value(" $ {} common.mas.influx.username ")
プライベート文字列のユーザ名は= "ルート"; //用户名

@value(" $ {common.mas.influx.password} ")
プライベート文字列のパスワード= "ルート"; //密码

@value( "$ {common.mas.influx.database}")
プライベート文字列データベース= "polutondb"; //数据库

@value( "$ {common.mas.influx.data.keepTime:1}")
プライベートINT dataKeepTime ;

プライベートのボイドのsetUp(){
//创建连接
influxDB =新しいInfluxDBConnect(ユーザ名、パスワード、OpenURLの、データベース)。

{試みる
influxDB.influxDbBuild()。
{}キャッチ(例外e)
新しいのRuntimeExceptionを投げるには( "初期化influxDBに失敗しました!"、E)。
}

IF(!influxDB = NULL){
influxDB.createRetentionPolicy(dataKeepTime)。
log.info( "....成功しinfluxDBのinit");
}他{
RuntimeExceptionが新しい新投( "influxDB失敗のinit!");
}
}

パブリックInfluxDBConnect getConnect(){
IF(influxDB == NULL)
{
同期(InfluxDBUtils.class){
IF(influxDB == NULL){
セットアップ();
}
}
}
戻りinfluxDB;
}

@Override
公共ボイドafterPropertiesSet()が例外{スロー
セットアップ();
}
}

PS:基本的な構成プロファイルが取り得る

3、InfluxDBConnect接続クラス
com.meicloud.mp.mas.core.influxパッケージ; 

インポートorg.influxdb.InfluxDB;
インポートorg.influxdb.InfluxDBFactory;
インポートorg.influxdb.dto.Point;
インポートorg.influxdb.dto.Point.Builder;
インポートORG。 influxdb.dto.Query;
インポートorg.influxdb.dto.QueryResult;

インポートjava.util.Map;

/ **
*タイミングデータベース接続InfluxDB
* /
publicクラスInfluxDBConnect {

プライベート文字列名; //ユーザ名
プライベート文字列のパスワード; //パスワード
プライベート文字列のOpenURL; //接続アドレス
プライベート文字列データベース; //データベース

プライベートinfluxDB influxDB;

公共InfluxDBConnect(ユーザ名の文字列、文字列のパスワード、OpenURLの文字列、
文字列のデータベース){
ユーザ名= this.username;
this.passwordパスワード=;
this.openurl =のOpenURL;
this.database =データベース;
}

/ **接続シーケンスデータベース; **得InfluxDB /
パブリックInfluxDB influxDbBuild(){
IF(influxDB == NULL) {
influxDB = InfluxDBFactory.connect(OpenURLの、ユーザ名、パスワード);
//influxDB.createDatabase(database);

}
influxDBを返す;
}

/ **
*ポリシーデータ保存ポリシーdefalut /データベースデータベース名/ 30Dデータ記憶時間30日の名前を設定します/ 1部数は、デフォルトの1 /端部である
デフォルト戦略として表さ*
* /
公共ボイドcreateRetentionPolicy(){
文字列コマンド文字列=
.format(%S \ "の\" %S \ "複製のDURATION%S%S DEFAULT"、 "保持ポリシーが\ CREATE"
1 ,. "defalut"データベース、 "30D")を、
this.query(コマンド);
}

/ **
*問い合わせ
*
* @paramコマンド
*問い合わせ
* @return
* /
公共QueryResultではクエリ(文字列コマンド){
返すinfluxDB.query(新しい新しいクエリ(コマンド、データベース));
}

/ **
*挿入
*
* @param測定
*テーブル
* @paramタグ
*タグ
* @paramフィールド
*フィールド
* /
INSERTボイドパブリック(文字列測定、地図<文字列、文字列>タグ、
地図の<string、オブジェクト>フィールド){
ビルダービルダー= Point.measurement(測定);
builder.tag(タグ);
builder.fields(フィールド);

influxDB。書き込み(データベース、 ""、builder.build());
}

/ **
*削除
*
* @paramコマンド
*削除文の
エラーメッセージを返す@return *
* /
パブリック文字列deleteMeasurementData(文字列コマンド){
QueryResultでは結果= influxDB.query (新しい新しいクエリ(コマンド、データベース));
)(result.getErrorを返す;
}

/ **
*データベースを作成します
*
* @param DBNAME
* /
公共ボイドCREATEDB(文字列DBNAME){
influxDB.createDatabase(DBNAME)。
}

/ **
*删除数据库
*
* @param DBNAME
* /
公共ボイドdeleteDB(文字列DBNAME){
influxDB.deleteDatabase(DBNAME)。
}

パブリック文字列getUsername(){
戻りユーザ名;
}

公共ボイドsetUsername(文字列名){
this.username =ユーザ名;
}

パブリック文字列getPasswordに(){
戻りパスワード。
}

公共ボイドするsetPassword(文字列のパスワード){
this.password =パスワード。
}

パブリック文字列getOpenurl(){
OpenURLのを返します。
}

公共ボイドsetOpenurl(文字列のOpenURL){
this.openurl =のOpenURL。
}

公共ボイドsetDatabase(列データベース){
this.database =データベース。
}
}
4、InfluxCallErrorInfoServiceインタフェースクラス
パブリックインターフェースInfluxCallErrorInfoService { 

ブールインサート(一覧<CallErrorInfo>データ)。

ブールinsertOne(ErrorServerLog errorServerLog)。

一覧<CallErrorInfo> testQuery();

一覧<CallErrorInfo>クエリ(文字列の別名は、長い、長い終わりを始めます)。

int型の数(文字列の別名が、ロング、ロングエンドを開始)。

int型(ロング、ロングエンドを開始し、文字列の別名)を削除します。
}

4、InfluxCallErrorInfoService接口类
パッケージcom.meicloud.mp.mas.core.influx.service.impl。

輸入com.meicloud.mp.mas.core.influx.InfluxDBConnect。
輸入com.meicloud.mp.mas.core.influx.InfluxDBUtils。
輸入com.meicloud.mp.mas.core.influx.bo.CallErrorInfo;
輸入com.meicloud.mp.mas.core.influx.bo.ErrorServerLog。
輸入com.meicloud.mp.mas.core.influx.bo.InfluxDbQueryResult。
輸入com.meicloud.mp.mas.core.influx.service.InfluxCallErrorInfoService。
輸入org.influxdb.dto.Point。
輸入org.influxdb.dto.Query。
輸入org.influxdb.dto.QueryResult;
輸入org.influxdb.impl.InfluxDBResultMapper;
輸入org.influxdb.querybuilder.BuiltQuery。
輸入org.springframework.beans.factory.annotation.Autowired;
輸入org.springframework.stereotype.Service。
輸入org.slf4j.Logger。
輸入org.slf4j.LoggerFactory;
輸入org.springframework.util.CollectionUtils。

輸入java.text.SimpleDateFormatの。
輸入java.utilの。*;

/ **
*
* /
@Serviceは( "influxCallErrorInfoService")
パブリッククラスInfluxCallErrorInfoServiceImplはInfluxCallErrorInfoServiceを実装{
民間最終静的ロガーロガー= LoggerFactory.getLogger(InfluxCallErrorInfoServiceImpl.class)。

@Autowired
InfluxDBUtils influxUtil。

@Override
パブリックブールインサート(一覧<CallErrorInfo>リスト){
InfluxDBConnect influxDBConnect = influxUtil.getConnect()。
IF(influxDBConnect == NULL){
logger.error( "ヌル得るinfluxDBConnect、失敗しました")。
falseを返します。
}

地図<文字列、文字列>タグ=新しいHashMapの<>();
地図<文字列、オブジェクト>フィールド=新しいHashMapの<>();


用(CallErrorInfo情報:リスト){
tags.put(CallErrorInfo.Tag_InterfaceCode、info.getInterfacecode())。
tags.put(CallErrorInfo.Tag_Syscode、info.getSyscode())。

fields.put(CallErrorInfo.Field_Syscode、info.getSyscode())。
fields.put(CallErrorInfo.Field_InterfaceCode、info.getInterfacecode())。
fields.put(CallErrorInfo.Field_FailedTimeMill、(info.getFailedtimemill()+ "I"));

influxDBConnect.insert(CallErrorInfo.measurement、タグ、フィールド);
}キャッチ(例外e){
e.printStackTrace();
}
}

trueを返します。
}

@Override
パブリックブールinsertOne(ErrorServerLog errorServerLog){
ポイント点= Point.measurementByPOJO(errorServerLog.getClass())addFieldsFromPOJO(errorServerLog).build()。

InfluxDBConnect influxDBConnect = influxUtil.getConnect()。
IF(influxDBConnect == NULL){
logger.error( "ヌル得るinfluxDBConnect、失敗しました")。
falseを返します。
}
{試みる
influxDBConnect.insert(点)。
trueを返します。
}キャッチ(例外e){
logger.error( "influxDBが失敗に挿入!"、E)。
}
falseを返します。
}

@Override
パブリックリスト<CallErrorInfo> testQuery(){
リスト<CallErrorInfo>リスト=新規のArrayList <>();

InfluxDBConnect influxDBConnect = influxUtil.getConnect()。
IF(influxDBConnect == NULL){
logger.error( "ヌル得るinfluxDBConnect、失敗しました")。
リストを返します。
}

stringコマンド= + CallErrorInfo.measurement "SELECT * FROM"。
QueryResultでは結果= influxDBConnect.query(コマンド)。

(結果の場合。
リストを返します。
}
のための(QueryResult.Result結果:results.getResults()){
リスト<QueryResult.Series>シリーズ= result.getSeries()。
(シリーズ== NULL)は、{もし
続けます。
}

(QueryResult.Seriesセリエ:シリーズ){
//マップ<文字列、文字列>タグ= serie.getTags()。
リスト<リスト<オブジェクト>>値= serie.getValues()。
一覧<文字列>の列= serie.getColumns();

lists.addAll(CallErrorInfo.getQueryData(列、値))。
}
}

リストを返します。
}


@Override
公共の一覧<CallErrorInfo>クエリ{(文字列の別名は、長い、長い終わりを始める)
一覧<CallErrorInfo>リストを=新しいArrayListを<>();

InfluxDBConnect influxDBConnect = influxUtil.getConnect()。
IF(influxDBConnect == NULL){
logger.error( "ヌル得るinfluxDBConnect、失敗しました")。
リストを返します。
}

文字列コマンドは、= ' "" + +エイリアス+ CallErrorInfo.measurement + "" + CallErrorInfo.Tag_InterfaceCode + "="' "SELECT * FROM"。
場合(開始= nullを!){
コマンド+ = "と時刻> '" + timestampToTimez(開始)+ "'";
}
エンド(もし!
= NULL){ コマンド+ = "と時間< '" + timestampToTimez(エンド)+ "'"。
}
QueryResultでは結果= influxDBConnect.query(コマンド)。

IF(results.getResults()== NULL){
リターンリスト。
}
のための(QueryResult.Result結果:results.getResults()){

リスト<QueryResult.Series>シリーズ= result.getSeries()。
(シリーズ== NULL)は、{もし
続けます。
}
(QueryResult.Seriesセリエ:シリーズ){
//マップ<文字列、文字列>タグ= serie.getTags()。
リスト<リスト<オブジェクト>>値= serie.getValues()。
一覧<文字列>の列= serie.getColumns();

lists.addAll(CallErrorInfo.getQueryData(列、値))。
}
}

リストを返します。
}

@Override
公共int型の数は{(文字列エイリアスは、長い、長い端を開始する)
InfluxDBConnect influxDBConnect = influxUtil.getConnect()。
IF(influxDBConnect == NULL){
logger.error( "ヌル得るinfluxDBConnect、失敗しました")。
-1を返します。
}
クエリのクエリ= BuiltQuery.QueryBuilder.select()。カウント(CallErrorInfo.Field_InterfaceCode)の.as( "カウント")
.from( "MAS"、CallErrorInfo.measurement)
.where(BuiltQuery.QueryBuilder.eq(CallErrorInfo.Tag_InterfaceCode、別名))
.AND(BuiltQuery.QueryBuilder.gte(CallErrorInfo.Field_FailedTimeMill、開始))
.AND(BuiltQuery.QueryBuilder.lte(CallErrorInfo.Field_FailedTimeMill、終了))。
QueryResultでは結果= influxDBConnect.query(クエリ)。

IF(results.getResults()== NULL){
戻り0;
}
。QueryResult.Result結果= results.getResultsは()を取得(0)。
(もし!CollectionUtils.isEmpty(result.getSeries())){
QueryResult.Seriesシリーズ=のresult.getSeries()(0)を取得。
もし(ヌル=シリーズ!){
リスト<文字列>の列= series.getColumns();
リスト<リスト<オブジェクト>>値= series.getValues()。
(もし!CollectionUtils.isEmpty(列)&&!CollectionUtils.isEmpty(値)){
用(一覧<オブジェクト> listVal:値){
(int型私= 0; i)は(columns.sizeを<;私は++){のため
であれば( "カウント" .equalsIgnoreCase(columns.get(I))){
文字列SCT = listVal .get(I).toString();
ダブルCT = Double.parseDouble(SCT);
ct.intValueを返します();
}
}
}
}
}

}
0を返します。
}

@Override
パブリック削除INT(文字列別名、長い、長い端を始めます){
InfluxDBConnect influxDBConnect = influxUtil.getConnect()。
IF(influxDBConnect == NULL){
logger.error( "ヌル得るinfluxDBConnect、失敗しました")。
-1を返します。
}

文字列コマンドは、= ' "" + +エイリアス+ CallErrorInfo.measurement + "" + CallErrorInfo.Tag_InterfaceCode + "="' "から削除"。
場合(開始= nullを!){
コマンド+ = "と時刻> '" + timestampToTimez(開始)+ "'";
}
IF(!端= NULL){
コマンド+ = "と時間< '" + timestampToTimez(エンド)+ "'"。
}
= influxDBConnect.deleteMeasurementData(コマンド)は、文字列ERR。
logger.info( "削除:" + ERR)。

0を返します。
}


のpublic static final文字列DEFAULT_DATETIME_FORMAT = "YYYY-MM-dd'T'HH:MM:ss'Z '"。
/ **
*转换タイムスタンプ到流入的timez字符串格式
*
* @paramタイムスタンプ
* @return
* /
静的な文字列timestampToTimez(ロングタイムスタンプ)
{
日付=新しいDate();
date.setTime(タイムスタンプ)。
文字列STIME =新しいてSimpleDateFormat(DEFAULT_DATETIME_FORMAT).format(日付);
STIMEを返します。
}

公共の静的な無効メイン(文字列[]のargv){

ロングタイムスタンプ= 1561289474000L。
ストリングSTIME = timestampToTimez(タイムスタンプ)。

System.out.println(STIME)。

タイムスタンプ= 1561289474L;
STIME = timestampToTimez(タイムスタンプ)。

System.out.println(STIME)。
}
}

おすすめ

転載: www.cnblogs.com/fuqiang-terry/p/11120443.html