千家信息网

sharding-jdbc中ShardingTracer的作用是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,sharding-jdbc中ShardingTracer的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Sha
千家信息网最后更新 2026年11月01日sharding-jdbc中ShardingTracer的作用是什么

sharding-jdbc中ShardingTracer的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

ShardingTracer

incubator-shardingsphere-4.0.0-RC1/sharding-opentracing/src/main/java/org/apache/shardingsphere/opentracing/ShardingTracer.java

@NoArgsConstructor(access = AccessLevel.PRIVATE)public final class ShardingTracer {        private static final String OPENTRACING_TRACER_CLASS_NAME = "org.apache.shardingsphere.opentracing.tracer.class";        /**     * Initialize sharding tracer.     */    public static void init() {        String tracerClassName = System.getProperty(OPENTRACING_TRACER_CLASS_NAME);        Preconditions.checkNotNull(tracerClassName, "Can not find opentracing tracer implementation class via system property `%s`", OPENTRACING_TRACER_CLASS_NAME);        try {            init((Tracer) Class.forName(tracerClassName).newInstance());        } catch (final ReflectiveOperationException ex) {            throw new ShardingException("Initialize opentracing tracer class failure.", ex);        }    }        /**     * Initialize sharding tracer.     *      * @param tracer opentracing tracer     */    public static void init(final Tracer tracer) {        if (!GlobalTracer.isRegistered()) {            GlobalTracer.register(tracer);        }    }        /**     * Get tracer.     *     * @return tracer     */    public static Tracer get() {        return GlobalTracer.get();    }}
  • ShardingTracer的init方法会重系统properties中读取OPENTRACING_TRACER_CLASS_NAME的值,然后使用Class.forName加载并创建实例,然后在通过opentracing的GlobalTracer.register进行注册

ShardingTracerTest

incubator-shardingsphere-4.0.0-RC1/sharding-opentracing/src/test/java/org/apache/shardingsphere/opentracing/ShardingTracerTest.java

public final class ShardingTracerTest {        @Before    public void setUp() {        System.setProperty("org.apache.shardingsphere.opentracing.tracer.class", FooTracer.class.getName());        clearGlobalTracer();    }        @After    public void tearDown() {        System.getProperties().remove("org.apache.shardingsphere.opentracing.tracer.class");    }        @Test    public void assertDuplicatedLoading() {        ShardingTracer.init(mock(Tracer.class));        Tracer t1 = ShardingTracer.get();        ShardingTracer.init();        assertEquals(t1, ShardingTracer.get());        ShardingTracer.init(mock(Tracer.class));        assertEquals(t1, ShardingTracer.get());    }        @Test    public void assertTracer() {        ShardingTracer.init();        assertThat((GlobalTracer) ShardingTracer.get(), isA(GlobalTracer.class));        assertTrue(GlobalTracer.isRegistered());        assertThat(ShardingTracer.get(), is(ShardingTracer.get()));    }        @Test(expected = ShardingException.class)    public void assertTracerClassError() {        System.setProperty("org.apache.shardingsphere.opentracing.tracer.class", "com.foo.FooTracer");        ShardingTracer.init();    }        @SneakyThrows    private static void clearGlobalTracer() {        Field tracerField = GlobalTracer.class.getDeclaredField("tracer");        tracerField.setAccessible(true);        tracerField.set(GlobalTracer.class, NoopTracerFactory.create());    }}
  • 这里指定了OPENTRACING_TRACER_CLASS_NAME值为FooTracer

FooTracer

incubator-shardingsphere-4.0.0-RC1/sharding-opentracing/src/test/java/org/apache/shardingsphere/opentracing/fixture/FooTracer.java

public final class FooTracer implements Tracer {        @Override    public SpanBuilder buildSpan(final String operationName) {        return null;    }        @Override    public  void inject(final SpanContext spanContext, final Format format, final C carrier) {    }        @Override    public  SpanContext extract(final Format format, final C carrier) {        return null;    }        @Override    public ActiveSpan activeSpan() {        return null;    }        @Override    public ActiveSpan makeActive(final Span span) {        return null;    }}
  • FooTracer实现了Tracer接口,这里为空实现

小结

ShardingTracer的init方法会重系统properties中读取OPENTRACING_TRACER_CLASS_NAME的值,然后使用Class.forName加载并创建实例,然后在通过opentracing的GlobalTracer.register进行注册

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

实例 方法 系统 帮助 作用 清楚 内容 对此 小结 接口 文章 新手 更多 知识 行业 资讯 资讯频道 难题 需求 频道 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 广东万易互联网科技有限公司惠州分公司 苏州找大状互联网科技有限公司 高科技互联网 科技创新与互联网经济 科技互联网项目 为想互联网科技 互联网科技公司有哪些 滨湖区互联网智能科技产品供应 剑昆互联网络科技有限公司临桂 金融科技与互联网金融相同和不同 厦门比较好的科技互联网公司 港股科技和互联网 广州市恰铎互联网科技有限公司 坤平互联网科技 国大互联网教育科技有限公司薪资 伍佰万互联网科技怎么赚钱 盐城市攀科互联网科技有限公司 互联网对科技影响 广东猫王互联网科技有限公司电话 互联网高科技 互联网电商科技 金融科技与互联网金融 互联网科技公司发展 电子科技大学互联网 时间互联网络科技 锡山区互联网智能科技产品供应 互联网科技接地气 互联网高科技行业有哪些企业 互联网科技创新创业项目
0