代码调整
This commit is contained in:
@@ -1,53 +0,0 @@
|
||||
#当前服务的基本信息
|
||||
microservice:
|
||||
ename: @artifactId@
|
||||
name: '@name@'
|
||||
version: @version@
|
||||
sentinel:
|
||||
url: @sentinel.url@
|
||||
gateway:
|
||||
url: @gateway.url@
|
||||
server:
|
||||
port: 10210
|
||||
#feign接口开启服务熔断降级处理
|
||||
feign:
|
||||
sentinel:
|
||||
enabled: true
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: @artifactId@
|
||||
#nacos注册中心以及配置中心的指定
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
ip: @service.server.url@
|
||||
server-addr: @nacos.url@
|
||||
namespace: @nacos.namespace@
|
||||
config:
|
||||
server-addr: @nacos.url@
|
||||
namespace: @nacos.namespace@
|
||||
file-extension: yaml
|
||||
shared-configs:
|
||||
- data-id: share-config.yaml
|
||||
refresh: true
|
||||
- data-Id: algorithm-config.yaml
|
||||
refresh: true
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
|
||||
#项目日志的配置
|
||||
logging:
|
||||
config: http://@nacos.url@/nacos/v1/cs/configs?tenant=@nacos.namespace@&group=DEFAULT_GROUP&dataId=logback.xml
|
||||
level:
|
||||
root: info
|
||||
|
||||
|
||||
#mybatis配置信息
|
||||
mybatis-plus:
|
||||
#别名扫描
|
||||
type-aliases-package: com.njcn.algorithm.pojo
|
||||
|
||||
mqtt:
|
||||
client-id: @artifactId@${random.value}
|
||||
@@ -1,172 +0,0 @@
|
||||
> 前言:
|
||||
>
|
||||
> 为了方便开发中使用influx时序数据库,摒弃了在代码中拼接查询sql语句,确保查询结果的准确性之余提高代码的阅读性。同时优化处理了部分开发过程遇到的问题:
|
||||
>
|
||||
> * 时区问题:开发者无需关注,默认为 tz('Asia/Shanghai')
|
||||
> * 返回的Instant类型的时间,在序列化到前端页面时,格式不对,添加:@JsonSerialize(using = InstantDateSerializer.class)处理解决
|
||||
> * 同时由于influx针对or查询时,超过100个连接是性能会有比较严重的影响,提供了influx的正则表达式的查询方法:InfluxQueryWrapper.regular(),此方案还待测试检查
|
||||
|
||||
#### 1、快速上手
|
||||
|
||||
目前没有采用泛型的方式,是因为想返回实体更灵活,可以指定任意想要映射的实体。
|
||||
|
||||
```java
|
||||
//两个构造方法:
|
||||
|
||||
/***
|
||||
* 返回和查询用的同一个实体
|
||||
* @param measurement 查询目标表
|
||||
*/
|
||||
public InfluxQueryWrapper(Class measurement) {
|
||||
this.measurement = measurement;
|
||||
this.resultEntity = measurement;
|
||||
this.initSql();
|
||||
}
|
||||
/***
|
||||
* 返回和查询用的不是同一个实体
|
||||
* @param measurement 查询目标表
|
||||
* @param resultEntity 返回映射实体
|
||||
*/
|
||||
public InfluxQueryWrapper(Class measurement, Class resultEntity) {
|
||||
this.measurement = measurement;
|
||||
this.resultEntity = resultEntity;
|
||||
this.initSql();
|
||||
}
|
||||
```
|
||||
|
||||
初始化完成后,便已经确定目标measurement(influx表名)以及返回实体。
|
||||
|
||||
###### 示例:
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
|
||||
//生成 select * from "data_flicker" tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
#### 2、函数使用
|
||||
|
||||
##### 2.1、select
|
||||
|
||||
select(ICFunction<T, R>... fieldsStr):此函数指定查询返回的那几个字段
|
||||
|
||||
###### 示例:
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
|
||||
influxQueryWrapper.select(DataFlicker::getTime);
|
||||
//生成 select time from "data_flicker" tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
##### 2.2、count统计
|
||||
|
||||
count(ICFunction<T, R> columnName):累计总数;
|
||||
|
||||
count(ICFunction<T, R> columnName, ICFunction<T, R> resultName):累计总数,返回属性名不同
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
|
||||
influxQueryWrapper.count(DataFlicker::getTime,StatisticsResult::getValue);
|
||||
//生成 select COUNT("time") as value from "data_flicker" tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
> 类似的还有:mean平均值、median中位数、mode最常出现的值、spread最大与最小值的差、sum求和、abs绝对值、max最大值、min最小值
|
||||
|
||||
##### 2.3、top最大值的几条记录
|
||||
|
||||
top(ICFunction<T, R> columnName, int num):最大值的一个结果集合
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
|
||||
influxQueryWrapper.top(DataFlicker::getTime,5);
|
||||
//生成最大的前5某个属性的集合
|
||||
//select TOP("time",5) as value from "data_flicker" tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
> 类似的还有:bottom最小值的几条记录
|
||||
|
||||
##### 2.4、maxSamePrefixAndSuffix针对前缀或后缀相同的属性批量处理最大值
|
||||
|
||||
maxSamePrefixAndSuffix(String prefix, String suffix, List<Object> diffContent):开发过程中遇到表字段前后缀一致时,需要批量处理的。
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
|
||||
influxQueryWrapper.maxSamePrefixAndSuffix("v_","",timesList);
|
||||
//生成最大的前5某个属性的集合
|
||||
//select MAX("v_1") as v_1,MAX("v_2") as v_2,MAX("v_3") as v_3,MAX("v_4") as v_4 as value from "data_v" tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
> 类似的还有:minSamePrefixAndSuffix针对前缀或后缀相同的属性批量处理最小值
|
||||
|
||||
##### 2.5、percentile百分之?最大值
|
||||
|
||||
目前灿能项目常用于cp95最大值
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
|
||||
influxQueryWrapper.percentile(DataFlicker::getTime,95);
|
||||
//select PERCENTILE("time",95) as value from "data_flicker" tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
##### 2.6、between区间
|
||||
|
||||
between(ICFunction<T, R> fieldName, Object val1, Object val2):作为条件区间语句生成
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
|
||||
influxQueryWrapper.between(DataFlicker::getTime,"2022-04-30 16:00:00","2022-05-30 16:00:00");
|
||||
//select * from "data_flicker" where time >='2022-04-30 16:00:00' AND time <='2022-05-30 16:00:00' tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
##### 2.7、eq等于
|
||||
|
||||
eq(ICFunction<T, R> columnName, Object columnValue):指定某字段等于xxx
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
|
||||
influxQueryWrapper.eq(DataFlicker::getTime,"2022-05-30 16:00:00");
|
||||
//select * from "data_flicker" where time ='2022-04-30 16:00:00' tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
> 类似的还有:ne不等于、gt大于、ge大于等于、lt小于、le小于等于
|
||||
|
||||
##### 2.8、or拼接多条件
|
||||
|
||||
or(ICFunction<T, R> fieldName, List<Object> columnValues):查询某字段等于集合内的值时的结果,类似于关系数据库的in函数;
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
|
||||
influxQueryWrapper.or(DataV::getLineId,lineList);
|
||||
//select * from "data_v" where (line_id = "111" or line_id = "222") tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
##### 2.9、regular正则模糊查询
|
||||
|
||||
regular(ICFunction<T, R> fieldName, List<String> columnValues):查询条件有多个选项时,效果等同于关系型数据库的in,同时or的内容如果超过100个选项时会带来严重的性能问题,查询很慢,可以调整为正则模糊查询
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
|
||||
influxQueryWrapper.regular(DataV::getLineId,lineList);
|
||||
//select * from "data_v" where line_id =~/^111|222|333$/ tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
##### 2.10、groupBy分组
|
||||
|
||||
> influxdb只能针对tag去分组
|
||||
|
||||
groupBy(ICFunction<T, R>... columnName):以tag去分组;
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
|
||||
influxQueryWrapper.groupBy(DataV::getLineId,DataV::getGualityFlag);
|
||||
//select * from "data_v" group by line_id,quality_flag tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
##### 2.11、timeDesc以时间降序
|
||||
|
||||
```java
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
|
||||
influxQueryWrapper.timeDesc();
|
||||
//select * from "data_v" order by time desc tz('Asia/Shanghai')
|
||||
```
|
||||
|
||||
> 类似的还有:timeAsc以时间升序
|
||||
Reference in New Issue
Block a user