首页 > 其他分享 >dremio 基于Options注解的配置技巧

dremio 基于Options注解的配置技巧

时间:2024-01-19 10:37:07浏览次数:33  
标签:dremio java Options public 注解 com options

以前简单写过一个dremio 配置相关的介绍,以下是一个简单的使用

原理

dremio 自己定义了一个Options 的注解,包含此注解的类会被启动的时候进行类扫描加载,Options 的会存储起来(分为不用类型的)
有session 级别的,系统级别的。。。。

简单使用

  • pom.xml
 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.dalong</groupId>
    <artifactId>dremio-conf-options</artifactId>
    <version>1.0-SNAPSHOT</version>
 
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <dremio.version>24.3.0-202312190021150029-52db2faf</dremio.version>
    </properties>
 
    <dependencies>
        <dependency>
             // dremio options 模块服务
            <groupId>com.dremio.services</groupId>
            <artifactId>dremio-services-options</artifactId>
            <version>${dremio.version}</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>tencent-public</id>
            <url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
        </repository>
        <repository>
            <id>dremio-public</id>
            <url>https://maven.dremio.com/public/</url>
        </repository>
        <repository>
            <id>dremio-free</id>
            <url>https://maven.dremio.com/free/</url>
        </repository>
    </repositories>
</project>
  • 定义配置
    ConfValidator.java
 
package com.dalong;
 
import com.dremio.options.Options;
import com.dremio.options.TypeValidators;
 
@Options
public class ConfValidator {
    public static final TypeValidators.LongValidator RESERVE = new TypeValidators.PositiveLongValidator("myapp.index", Long.MAX_VALUE, 1);
    public static final TypeValidators.LongValidator LIMIT = new TypeValidators.PositiveLongValidator("myapp.pagesize", Long.MAX_VALUE, 1);
}
  • 加载配置
    基于typesafe 的配置加载 resources/sabot-module.conf 这样dremio就会在启动的时候进行配置的加载,同时我们也是可以进行修改的
 
dremio.classpath.scanning.packages += "com.dalong"

使用

编译包,直接copy 到dremio 的classpath 中,可以放到jars中也可以放到jars/3rdparty 中

  • 效果

同时也可以进行修改

内部加载处理

sabot/kernel/src/main/java/com/dremio/exec/server/options/OptionValidatorListingImpl.java (DACDaemonModule 中会使用加载)

 
  private static CaseInsensitiveMap<OptionValidator> getValidators(ScanResult scanResult) {
    ImmutableMap.Builder<String, OptionValidator> builder = ImmutableMap.builder();
    for (Class<?> clazz : scanResult.getAnnotatedClasses(Options.class)) {
      for (Field field : clazz.getDeclaredFields()) {
        if (!OptionValidator.class.isAssignableFrom(field.getType())) {
          continue;
        }
 
        try {
          final OptionValidator optionValidator = (OptionValidator) field.get(null);
          builder.put(optionValidator.getOptionName(), optionValidator);
        } catch (IllegalAccessException e) {
          logger.info("Ignoring not-accessible option {}.{}", clazz.getName(), field.getName(), e);
        }
      }
    }
 
    return CaseInsensitiveMap.newImmutableMap(builder.build());
  }

说明

我们开发的一些扩展就可以使用,进行方便的配置管理,dremio 的配置设计还是很方便的

参考资料

sabot/kernel/src/main/java/com/dremio/exec/server/options/OptionValidatorListingImpl.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACDaemonModule.java
services/options/src/main/java/com/dremio/options/OptionManager.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACDaemonModule.java
https://www.cnblogs.com/rongfengliang/p/17061676.html
https://www.cnblogs.com/rongfengliang/p/15969816.html

标签:dremio,java,Options,public,注解,com,options
From: https://www.cnblogs.com/rongfengliang/p/17974068

相关文章

  • SpringMVC中@pathVariable 为spring的注解,都可以用在Controller 层接受前段传递的数据
    @PathVariable主要接收http://host:port/path{参数值}数据 @pathVariable作为借口是,url是http"//ww.yoodb.com/user/getUserById/2 @RequestParam主要用于接受http://host:port/path?参数名=值数据值 @ResquesrParam请求接口时,url是http://www.yoodb.com/user/getUsrBy......
  • 9.springMvc中函数的返回值是什么 10.springmvc中@RequestMapping注解都有那些属性
    springMvc的返回值可以有很多类型,如String,modleAndView等,但事一般使用String比较友好。 在SpringMVC中,`@RequestMapping`注解用于将请求映射到控制器的处理方法。它可以应用在类级别和方法级别上,用于处理不同的URL请求。以下是`@RequestMapping`注解的一些常见用......
  • MyBatis实战指南(三):常用注解及使用方法
    在前面的两篇文章中,我们已经详细介绍了MyBatis的工作原理和基本使用。今天,我们将深入探讨MyBatis的一个重要特性——注解。如果你对MyBatis的注解还不熟悉,那么这篇文章将为你打开一扇新的大门。一、什么是注解(Annotation)首先,我们需要明白什么是注解。注解Annotation是从JDK1.5......
  • 一、@Configuration、@Conponent 、@ComponentScan 注解等
    一句话概括区别:@Configuration中所有带@Bean注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例。2.可以直接调用方法,不需要@Autowired注入后使用。@Conponent 声明为Spring的组件。修饰的类不会被代理,每实例化一次就会创建一个新的对象。2.一般情况下@Bean......
  • JAVA自定义注解
     importjava.lang.annotation.*;//定义一个自定义注解public@interfaceMyAnnotation{//在注解中定义属性Stringvalue()default"";}//使用自定义注解classMyClass{//在类上应用自定义注解@MyAnnotation(value="Hello")pu......
  • spring boot 3.2.1 dremio jdbc jprofiler 集成
    jprofiler可以直接与idea集成,对于分析一些实际需要debug但是不好复现的问题还是比较方便的,以下是一个简单的与dremio集成的,springboot使用了3.2(jdk需要17)同时也会包含一些启动说明安装idea插件直接plugins的市场中搜索安装就可以了,之后就是配置了idea启动配置因......
  • 基于注解声明事务
    packagecom.atguigu.spring6.tx.config;importcom.alibaba.druid.pool.DruidDataSource;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configur......
  • 开发者必会的技能 -- 自定义注解
    注解对于开发者而言是再熟悉不过的.注解可以大幅度提升开发的效率,减少重复代码.但是在程序员多种多样、纷繁复杂的业务需求的背景下,Spring以及Java提供的注解显得力不从心,所以自己创建自定义注解成为程序员的必备技能!基本知识在Java中,注解分为两种,元注解和自定义注解.一......
  • dremio nessie 版本持久化配置简单说明
    dremio对于nessie的使用就是一个插件配置,默认基于docker运行的nessie是没有进行版本持久化的,以下是一个简单说明配置参考我基于了pg,实际支持的存储引擎还是很多的docker-composeversion:"3"services:mysql2:image:mysql:5.6command:--......
  • dremio jdbc 访问最好使用链接池工具
    昨天在碰到一个dremiojdbc比较奇怪的问题,按照了标准的jdbc操作(建立链接,创建Statement,处理数据,关闭Statement,关闭连接)当进行多次执行(多次建立连接操作)发现dremio有一个操作异常,造成数据表创建有问题(事务不完整)参考代码 privatestaticvoidv3(){tr......