基于Influxdb对InfluxDBResultMapper的一点扩展
2019-10-16 08:03:34来源:博客园 阅读 ()
基于Influxdb对InfluxDBResultMapper的一点扩展
理想很饱满,现实很骨感。
由于业务需要“灵活可配置”的功能需求,在使用java开发Influxdb查询功能的时候,遇到了一个问题,Measurement注解的名称有可能需要动态变化。
我们先看下 @Measurement 注解的代码:
package org.influxdb.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;
/**
* @author fmachado
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Measurement {
String name();
String database() default "[unassigned]";
String retentionPolicy() default "autogen";
TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
问题可以转换为:
-> 在@Measurement 注解生效之前,将变动的name值写入。
经过大概两天时间的资料查找,发现了可以通过:java反射去解决
主要需要操作以下两个类的api
java.lang.reflect.InvocationHandler;
java.lang.reflect.Proxy;
最终解决方案,通过继承 InfluxDBResultMapper 的 toPOJO 方法得以解决。
以下贴出代码:
public class InfluxDBResultMapperHelper extends InfluxDBResultMapper {
public <T> List<T> toPOJO(final QueryResult queryResult, final Class<T> clazz,String name)
throws InfluxDBMapperException {
InvocationHandler handler = Proxy.getInvocationHandler(clazz.getAnnotation(Measurement.class));
Field hField = null;
try {
hField = handler.getClass().getDeclaredField(ME_VALUE);
hField.setAccessible(true);
Map memberValues = (Map) hField.get(handler);
memberValues.put(ME_NAME, name);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return toPOJO(queryResult, clazz, TimeUnit.MILLISECONDS);
}
}
原文链接:https://www.cnblogs.com/skywp/p/11671947.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:JAVA8 十大新特性
- 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文 2020-05-31
- 数据分析 | 基于智能标签,精准管理数据 2020-05-30
- 不用找了,基于 Redis 的分布式锁实战来了! 2020-05-26
- Spring02_基于XML的IOC 2020-05-24
- Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂? 2020-05-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash