• Stars
    star
    6,750
  • Rank 5,854 (Top 0.2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created about 11 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

📌 TransmittableThreadLocal (TTL), the missing Java™ std lib(simple & 0-dependency) for framework/middleware, provide an enhanced InheritableThreadLocal that transmits values between threads even using thread pooling components.

📌 TransmittableThreadLocal(TTL)

🚧 这个分支是TransmittableThreadLocal(TTL) v3,在开发中还没有发布。
v3的版本说明、工作项列表及其进展,参见 issue 432

👉 目前使用中的稳定发布版本v2.x分支2.x上。


Github Workflow Build Status Appveyor Build Status Coverage Status Maintainability JDK support License Javadocs Maven Central GitHub release GitHub Stars GitHub Forks user repos GitHub issues GitHub Contributors GitHub repo size gitpod: Ready to Code

📖 English Documentation | 📖 中文文档



🔧 功能

👉 TransmittableThreadLocal(TTL):在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。一个Java标准库本应为框架/中间件设施开发提供的标配能力,本库功能聚焦 & 0依赖,支持Java 6~21

JDKInheritableThreadLocal类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal值传递已经没有意义,应用需要的实际上是把 任务提交给线程池时ThreadLocal值传递到 任务执行时

本库提供的TransmittableThreadLocal类继承并加强InheritableThreadLocal类,解决上述的问题,使用详见 User Guide

整个TransmittableThreadLocal库的核心功能(用户API、线程池ExecutorService/ForkJoinPool/TimerTask及其线程工厂的Wrapper;开发者API、框架/中间件的集成API),只有 ~1000 SLOC代码行,非常精小。

欢迎 👏

TTL v2.13+开始,升级到Java 8
如果需要Java 6的支持,使用版本2.12.x Maven Central

🎨 需求场景

ThreadLocal的需求场景即TransmittableThreadLocal的潜在需求场景,如果你的业务需要『在使用线程池等会池化复用线程的执行组件情况下传递ThreadLocal值』则是TransmittableThreadLocal目标场景。

下面是几个典型场景例子。

  1. 分布式跟踪系统 或 全链路压测(即链路打标)
  2. 日志收集记录系统上下文
  3. SessionCache
  4. 应用容器或上层框架跨应用代码给下层SDK传递信息

各个场景的展开说明参见子文档 需求场景

👥 User Guide

使用类TransmittableThreadLocal来保存值,并跨线程池传递。

TransmittableThreadLocal继承InheritableThreadLocal,使用方式也类似。相比InheritableThreadLocal,添加了protectedtransmitteeValue()方法,用于定制 任务提交给线程池时ThreadLocal值传递到 任务执行时 的传递方式,缺省是简单的赋值传递。

注意:如果传递的对象(引用类型)会被修改,且没有做深拷贝(如直接传递引用或是浅拷贝),那么

  • 因为跨线程传递而不再有线程封闭,传递对象在多个线程之间是有共享的。
  • JDKInheritableThreadLocal.childValue()一样,需要使用者/业务逻辑注意保证传递对象的线程安全。
关于transmitteeValue方法 的 展开说明

关于构词后缀eree的说明:

  • transmit是动词传递,transmitter动作的执行者/主动方,而transmittee动作的接收者/被动方。
  • eree后缀的常见词是employer(雇主)/employee(雇员)、caller(调用者)/callee(被调用者)。

具体使用方式见下面的说明。

1. 简单使用

父线程给子线程传递值。

示例代码:

TransmittableThreadLocal<String> context = new TransmittableThreadLocal<>();

// =====================================================

// 在父线程中设置
context.set("value-set-in-parent");

// =====================================================

// 在子线程中可以读取,值是"value-set-in-parent"
String value = context.get();

# 完整可运行的Demo代码参见SimpleDemo.kt

这其实是InheritableThreadLocal的功能,应该使用InheritableThreadLocal来完成。

但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal值传递已经没有意义,应用需要的实际上是把 任务提交给线程池时ThreadLocal值传递到 任务执行时

解决方法参见下面的这几种用法。

2. 保证线程池中传递值

2.1 修饰RunnableCallable

使用TtlRunnableTtlCallable来修饰传入线程池的RunnableCallable

示例代码:

TransmittableThreadLocal<String> context = new TransmittableThreadLocal<>();

// =====================================================

// 在父线程中设置
context.set("value-set-in-parent");

Runnable task = new RunnableTask();
// 额外的处理,生成修饰了的对象ttlRunnable
Runnable ttlRunnable = TtlRunnable.get(task);
executorService.submit(ttlRunnable);

// =====================================================

// Task中可以读取,值是"value-set-in-parent"
String value = context.get();

注意
即使是同一个Runnable任务多次提交到线程池时,每次提交时都需要通过修饰操作(即TtlRunnable.get(task))以抓取这次提交时的TransmittableThreadLocal上下文的值;即如果同一个任务下一次提交时不执行修饰而仍然使用上一次的TtlRunnable,则提交的任务运行时会是之前修饰操作所抓取的上下文。示例代码如下:

// 第一次提交
Runnable task = new RunnableTask();
executorService.submit(TtlRunnable.get(task));

// ...业务逻辑代码,
// 并且修改了 TransmittableThreadLocal上下文 ...
context.set("value-modified-in-parent");

// 再次提交
// 重新执行修饰,以传递修改了的 TransmittableThreadLocal上下文
executorService.submit(TtlRunnable.get(task));

上面演示了RunnableCallable的处理类似

TransmittableThreadLocal<String> context = new TransmittableThreadLocal<>();

// =====================================================

// 在父线程中设置
context.set("value-set-in-parent");

Callable call = new CallableTask();
// 额外的处理,生成修饰了的对象ttlCallable
Callable ttlCallable = TtlCallable.get(call);
executorService.submit(ttlCallable);

// =====================================================

// Call中可以读取,值是"value-set-in-parent"
String value = context.get();

# 完整可运行的Demo代码参见TtlWrapperDemo.kt

整个过程的完整时序图

时序图

2.2 修饰线程池

省去每次RunnableCallable传入线程池时的修饰,这个逻辑可以在线程池中完成。

通过工具类TtlExecutors完成,有下面的方法:

  • getTtlExecutor:修饰接口Executor
  • getTtlExecutorService:修饰接口ExecutorService
  • getTtlScheduledExecutorService:修饰接口ScheduledExecutorService

示例代码:

ExecutorService executorService = ...
// 额外的处理,生成修饰了的对象executorService
executorService = TtlExecutors.getTtlExecutorService(executorService);

TransmittableThreadLocal<String> context = new TransmittableThreadLocal<>();

// =====================================================

// 在父线程中设置
context.set("value-set-in-parent");

Runnable task = new RunnableTask();
Callable call = new CallableTask();
executorService.submit(task);
executorService.submit(call);

// =====================================================

// Task或是Call中可以读取,值是"value-set-in-parent"
String value = context.get();

# 完整可运行的Demo代码参见TtlExecutorWrapperDemo.kt

2.3 使用Java Agent来修饰JDK线程池实现类

这种方式,实现线程池的传递是透明的,业务代码中没有修饰Runnable或是线程池的代码。即可以做到应用代码 无侵入
# 关于 无侵入 的更多说明参见文档Java Agent方式对应用代码无侵入

示例代码:

// ## 1. 框架上层逻辑,后续流程框架调用业务 ##
TransmittableThreadLocal<String> context = new TransmittableThreadLocal<>();
context.set("value-set-in-parent");

// ## 2. 应用逻辑,后续流程业务调用框架下层逻辑 ##
ExecutorService executorService = Executors.newFixedThreadPool(3);

Runnable task = new RunnableTask();
Callable call = new CallableTask();
executorService.submit(task);
executorService.submit(call);

// ## 3. 框架下层逻辑 ##
// Task或是Call中可以读取,值是"value-set-in-parent"
String value = context.get();

Demo参见AgentDemo.kt。执行工程下的脚本scripts/run-agent-demo.sh即可运行Demo。

目前TTL Agent中,修饰了的JDK执行器组件(即如线程池)如下:

  1. java.util.concurrent.ThreadPoolExecutorjava.util.concurrent.ScheduledThreadPoolExecutor
  2. java.util.concurrent.ForkJoinTask(对应的执行器组件是java.util.concurrent.ForkJoinPool
    • 修饰实现代码在ForkJoinTtlTransformlet.java。从版本 2.5.1 开始支持。
    • 注意Java 8引入的CompletableFuture与(并行执行的)Stream底层是通过ForkJoinPool来执行,所以支持ForkJoinPool后,TTL也就透明支持了CompletableFutureStream🎉
  3. java.util.TimerTask的子类(对应的执行器组件是java.util.Timer
    • 修饰实现代码在TimerTaskTtlTransformlet.java。从版本 2.7.0 开始支持。
    • 注意:从2.11.2版本开始缺省开启TimerTask的修饰(因为保证正确性是第一位,而不是最佳实践『不推荐使用TimerTask』:);2.11.1版本及其之前的版本没有缺省开启TimerTask的修饰。
    • 使用Agent参数ttl.agent.enable.timer.task开启/关闭TimerTask的修饰:
      • -javaagent:path/to/transmittable-thread-local-2.x.y.jar=ttl.agent.enable.timer.task:true
      • -javaagent:path/to/transmittable-thread-local-2.x.y.jar=ttl.agent.enable.timer.task:false
    • 更多关于TTL Agent参数的配置说明详见TtlAgent.java的JavaDoc
关于java.util.TimerTask/java.util.Timer 的 展开说明

TimerJDK 1.3的老类,不推荐使用Timer类。

推荐用ScheduledExecutorService
ScheduledThreadPoolExecutor实现更强壮,并且功能更丰富。 如支持配置线程池的大小(Timer只有一个线程);TimerRunnable中抛出异常会中止定时执行。更多说明参见 10. Mandatory Run multiple TimeTask by using ScheduledExecutorService rather than Timer because Timer will kill all running threads in case of failing to catch exceptions. - Alibaba Java Coding Guidelines

Java Agent的启动参数配置

Java的启动参数加上:-javaagent:path/to/transmittable-thread-local-2.x.y.jar

注意

  • 如果修改了下载的TTLJar的文件名(transmittable-thread-local-2.x.y.jar),则需要自己手动通过-Xbootclasspath JVM参数来显式配置。
    比如修改文件名成ttl-foo-name-changed.jar,则还需要加上Java的启动参数:-Xbootclasspath/a:path/to/ttl-foo-name-changed.jar
  • 或使用v2.6.0之前的版本(如v2.5.1),则也需要自己手动通过-Xbootclasspath JVM参数来显式配置(就像TTL之前的版本的做法一样)。
    加上Java的启动参数:-Xbootclasspath/a:path/to/transmittable-thread-local-2.5.1.jar

Java命令行示例如下:

java -javaagent:path/to/transmittable-thread-local-2.x.y.jar \
    -cp classes \
    com.alibaba.demo.ttl.agent.AgentDemo

# 如果修改了TTL jar文件名 或 TTL版本是 2.6.0 之前
# 则还需要显式设置 -Xbootclasspath 参数
java -javaagent:path/to/ttl-foo-name-changed.jar \
    -Xbootclasspath/a:path/to/ttl-foo-name-changed.jar \
    -cp classes \
    com.alibaba.demo.ttl.agent.AgentDemo

java -javaagent:path/to/transmittable-thread-local-2.5.1.jar \
    -Xbootclasspath/a:path/to/transmittable-thread-local-2.5.1.jar \
    -cp classes \
    com.alibaba.demo.ttl.agent.AgentDemo
关于boot class path 的 展开说明

因为修饰了JDK标准库的类,标准库由bootstrap class loader加载;修饰后的JDK类引用了TTL的代码,所以Java Agent使用方式下TTL Jar文件需要配置到boot class path上。

TTLv2.6.0开始,加载TTL Agent时会自动设置TTL Jarboot class path上。
注意:不能修改从Maven库下载的TTL Jar文件名(形如transmittable-thread-local-2.x.y.jar)。 如果修改了,则需要自己手动通过-Xbootclasspath JVM参数来显式配置(就像TTL之前的版本的做法一样)。

自动设置TTL Jarboot class path的实现是通过指定TTL Java Agent Jar文件里manifest文件(META-INF/MANIFEST.MF)的Boot-Class-Path属性:

Boot-Class-Path

A list of paths to be searched by the bootstrap class loader. Paths represent directories or libraries (commonly referred to as JAR or zip libraries on many platforms). These paths are searched by the bootstrap class loader after the platform specific mechanisms of locating a class have failed. Paths are searched in the order listed.

更多详见

🔌 Java API Docs

当前版本的Java API文档地址: https://alibaba.github.io/transmittable-thread-local/apidocs/

🍪 Maven依赖

示例:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>transmittable-thread-local</artifactId>
    <version>2.14.2</version>
</dependency>

可以在 search.maven.org 查看可用的版本。

🔨 关于编译构建

编译构建的环境要求: JDK 8+;用Maven常规的方式执行编译构建即可:
# 在工程中已经包含了符合版本要求的Maven,直接运行 工程根目录下的mvnw;并不需要先手动自己安装好Maven

# 运行测试Case
./mvnw test
# 编译打包
./mvnw package
# 运行测试Case、编译打包、安装TTL库到Maven本地
./mvnw install

#####################################################
# 如果使用你自己安装的 maven,版本要求:maven 3.3.9+
mvn install

FAQ

Q1. TTL Agent与其它Agent(如SkywalkingPromethues)配合使用时不生效?

配置TTL Agent在最前的位置,可以避免与其它其它Agent配合使用时,TTL Agent可能的不生效问题。配置示例:

java -javaagent:path/to/transmittable-thread-local-2.x.y.jar \
     -javaagent:path/to/skywalking-agent.jar \
     -jar your-app.jar

原因是:

  • Skywalking这样的Agent的入口逻辑(premain)包含了线程池的启动。
  • 如果配置在这样的Agent配置在前面,到了TTL Agent(的premain)时,TTL需要加强的线程池类已经加载(load)了。
  • TTL AgentTtlTransformer是在类加载时触发类的增强;如果类已经加载了会跳过TTL Agent的增强逻辑。

更多讨论参见 Issue:TTL agent与其他Agent的兼容性问题 #226

Q2. MacOS下,使用Java Agent,可能会报JavaLaunchHelper的出错信息

JDK Bug: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8021205
可以换一个版本的JDK。我的开发机上1.7.0_40有这个问题,1.6.0_511.7.0_45可以运行。
# 1.7.0_45还是有JavaLaunchHelper的出错信息,但不影响运行。

使用TTL的好处与必要性

注:不读这一节,并不会影响你使用TTL来解决你碰到的问题,可以放心跳过;读了 User Guide 就可以快速用起来了~ 😄 这一节信息密度较高不易读。

好处:透明且自动完成所有异步执行上下文的可定制、规范化的捕捉与传递。
这个好处也是TransmittableThreadLocal的目标。

必要性:随着应用的分布式微服务化并使用各种中间件,越来越多的功能与组件会涉及不同的上下文,逻辑流程也越来越长;上下文问题实际上是个大的易错的架构问题,需要统一的对业务透明的解决方案。

使用ThreadLocal作为业务上下文传递的经典技术手段在中间件、技术与业务框架中广泛大量使用。而对于生产应用,几乎一定会使用线程池等异步执行组件,以高效支撑线上大流量。但使用ThreadLocal及其set/remove的上下文传递模式,在使用线程池等异步执行组件时,存在多方面的问题:

1. 从业务使用者角度来看

  1. 繁琐
    • 业务逻辑要知道:有哪些上下文;各个上下文是如何获取的。
    • 并需要业务逻辑去一个一个地捕捉与传递。
  2. 依赖
    • 需要直接依赖不同ThreadLocal上下文各自的获取的逻辑或类。
    • RPC的上下文(如DubboRpcContext)、全链路跟踪的上下文(如SkyWalkingContextManager)、不同业务模块中的业务流程上下文,等等。
  3. 静态(易漏)
    • 因为要 事先 知道有哪些上下文,如果系统出现了一个新的上下文,业务逻辑就要修改添加上新上下文传递的几行代码。也就是说因 系统的 上下文新增,业务的 逻辑就跟进要修改。
    • 而对于业务来说,不关心系统的上下文,即往往就可能遗漏,会是线上故障了。
    • 随着应用的分布式微服务化并使用各种中间件,越来越多的功能与组件会涉及不同的上下文,逻辑流程也越来越长;上下文问题实际上是个大的易错的架构问题,需要统一的对业务透明的解决方案。
  4. 定制性
    • 因为需要业务逻辑来完成捕捉与传递,业务要关注『上下文的传递方式』:直接传引用?还是拷贝传值?拷贝是深拷贝还是浅拷贝?在不同的上下文会需要不同的做法。
    • 『上下文的传递方式』往往是 上下文的提供者(或说是业务逻辑的框架部分)才能决策处理好的;而 上下文的使用者(或说是业务逻辑的应用部分)往往不(期望)知道上下文的传递方式。这也可以理解成是 依赖,即业务逻辑 依赖/关注/实现了 系统/架构的『上下文的传递方式』。

2. 从整体流程实现角度来看

关注的是 上下文传递流程的规范化。上下文传递到了子线程要做好 清理(或更准确地说是要 恢复 成之前的上下文),需要业务逻辑去处理好。如果业务逻辑对清理的处理不正确,比如:

  • 如果清理操作漏了:
    • 下一次执行可能是上次的,即『上下文的 污染/串号』,会导致业务逻辑错误。
    • 『上下文的 泄漏』,会导致内存泄漏问题。
  • 如果清理操作做多了,会出现上下文 丢失

上面的问题,在业务开发中引发的Bug真是屡见不鲜 !本质原因是:ThreadLocalset/remove的上下文传递模式 在使用线程池等异步执行组件的情况下不再是有效的。常见的典型例子:

  • 当线程池满了且线程池的RejectedExecutionHandler使用的是CallerRunsPolicy时,提交到线程池的任务会在提交线程中直接执行,ThreadLocal.remove操作清理提交线程的上下文导致上下文丢失
  • 类似的,使用ForkJoinPool(包含并行执行StreamCompletableFuture,底层使用ForkJoinPool)的场景,展开的ForkJoinTask会在任务提交线程中直接执行。同样导致上下文丢失

怎么设计一个『上下文传递流程』方案(即上下文的生命周期),以保证没有上面的问题?

期望:上下文生命周期的操作从业务逻辑中分离出来。业务逻辑不涉及生命周期,就不会有业务代码如疏忽清理而引发的问题了。整个上下文的传递流程或说生命周期可以规范化成:捕捉、回放和恢复这3个操作,即CRR(capture/replay/restore)模式。更多讨论参见 Issue:能在详细讲解一下replayrestore的设计理念吗?#201

总结上面的说明:在生产应用(几乎一定会使用线程池等异步执行组件)中,使用ThreadLocal及其set/remove的上下文传递模式几乎一定是有问题的只是在等一个出Bug的机会

更多TTL好处与必要性的展开讨论参见 Issue:这个库带来怎样的好处和优势? #128,欢迎继续讨论 ♥️

🗿 更多文档

📚 相关资料

JDK Core Classes

💗 Who Used

使用了TTL的一部分开源项目:

  • 中间件
    • sofastack/sofa-rpc star
      SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework
    • dromara/hmily star
      Distributed transaction solutions
    • dromara/gobrs-async star
      一款功能强大、配置灵活、带有全链路异常回调、内存优化、异常状态管理于一身的高性能异步编排框架。为企业提供在复杂应用场景下动态任务编排的能力。 针对于复杂场景下,异步线程复杂性、任务依赖性、异常状态难控制性
    • dromara/dynamic-tp star
      轻量级动态线程池,内置监控告警功能,支持线程池上下文传递,基于主流配置中心(已支持Nacos、Apollo,Zookeeper,可通过SPI自定义实现)
    • opengoofy/hippo4j star
      动态线程池框架,附带监控报警功能,支持 JDK、Tomcat、Jetty、Undertow 线程池;Apache RocketMQ、Dubbo、RabbitMQ、Hystrix 消费等线程池。内置两种使用模式:轻量级依赖配置中心以及无中间件依赖版本
    • siaorg/sia-gateway
      微服务路由网关(zuul-plus)
    • huaweicloud/Sermant
      Sermant, a proxyless service mesh solution based on Javaagent
    • ZTO-Express/zms star
      ZTO Message Service
    • lxchinesszz/tomato
      一款专门为SpringBoot项目设计的幂等组件
    • ytyht226/taskflow
      一款轻量、简单易用、可灵活扩展的通用任务编排框架,基于有向无环图(DAG)的方式实现,框架提供了组件复用、同步/异步编排、条件判断、分支选择等能力,可以根据不同的业务场景对任意的业务流程进行编排
    • foldright/cffu
      🦝 Java CompletableFuture Fu, aka. CF-Fu, pronounced "Shifu"; include best practice/traps guide and a tiny sidekick library to improve user experience and reduce misuse.
    • tuya/connector
      The connector framework maps cloud APIs to local APIs based on simple configurations and flexible extension mechanisms
  • 中间件/数据处理
    • apache/shardingsphere star
      Ecosystem to transform any database into a distributed database system, and enhance it with sharding, elastic scaling, encryption features & more
    • basicai/xtreme1
      The Next GEN Platform for Multisensory Training Data. #3D annotation, lidar-camera annotation and image annotation tools are supported
    • sagframe/sagacity-sqltoy
      Java真正智慧的ORM框架
    • dromara/stream-query star
      允许完全摆脱Mapper的mybatis-plus体验;可以使用类似“工具类”这样的静态函数进行数据库操作
    • SimonAlong/Neo
      Orm框架:基于ActiveRecord思想开发的至简化且功能很全的Orm框架
    • ppdaicorp/das
      数据库访问框架(data access service),包括数据库控制台das console,数据库客户端das client和数据库服务端das server三部分
    • didi/ALITA
      a layer-based data analysis tool
    • didi/daedalus
      实现快速创建数据构造流程,数据构造流程的可视化、线上化、持久化、标准化
  • 中间件/流程引擎
  • 中间件/日志
    • dromara/TLog star
      Lightweight distributed log label tracking framework
    • fayechenlong/plumelog star
      一个java分布式日志组件,支持百亿级别
    • minbox-projects/minbox-logging star
      分布式零侵入式、链路式请求日志分析框架。提供Admin端点进行采集日志、分析日志、日志告警通知、服务性能分析等。通过Admin Ui可查看实时链路日志信息、在线业务服务列表
      • minbox-projects/api-boot star
        为接口服务而生的,基于“ SpringBoot”完成扩展和自动配置,内部封装了一系列的开箱即用Starters
    • ofpay/logback-mdc-ttl
      logback扩展,集成transmittable-thread-local支持跨线程池的mdc跟踪
    • oldratlee/log4j2-ttl-thread-context-map
      Log4j2 TTL ThreadContextMap, Log4j2 extension integrated TransmittableThreadLocal to MDC
  • 中间件/字节码
  • 业务服务或平台应用
    • OpenBankProject/OBP-API
      An open source RESTful API platform for banks that supports Open Banking, XS2A and PSD2 through access to accounts, transactions, counterparties, payments, entitlements and metadata - plus a host of internal banking and management APIs
    • gz-yami/mall4j star
      电商商城 java电商商城系统 uniapp商城 多用户商城
    • Joolun/JooLun-wx star
      JooLun微信商城
    • HummerRisk/HummerRisk star
      云原生安全平台,包括混合云安全治理和容器云安全检测
    • XiaoMi/mone
      Mone以微服务为核心的一站式企业协同研发平台。支持公共云、专有云和混合云多种部署形态;提供从“项目创建->开发->部署->治理->应用观测”端到端的研发全流程服务;通过云原生新技术和研发新模式,打造“双敏”,敏捷研发和敏捷组织,保障小米-中国区高复杂业务、大规模团队的敏捷研发协同,实现多倍效能提升。
    • yangzongzhuan/RuoYi-Cloud star
      基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统
    • somowhere/albedo star
      基于 Spring Boot 、Spring Security、Mybatis 的RBAC权限管理系统
    • qwdigital/LinkWechat star
      基于企业微信的开源 SCRM 系统,采用主流的 Java 微服务架构,是企业私域流量管理与营销的综合解决方案,助力企业提高客户运营效率,强化营销能力,拓展盈利空间
    • hiparker/opsli-boot star
      一款的低代码快速平台,零代码开发,致力于做更简洁的后台管理系统
    • topiam/eiam star
      EIAM(Employee Identity and Access Management Program)企业级开源IAM平台,实现用户全生命周期的管理、统一认证和单点登录、为数字身份安全赋能
    • Newspiral/newspiral-business
      联盟区块链底层平台
  • 工具产品
    • ssssssss-team/spider-flow star
      新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫
    • nekolr/slime
      🍰 一个可视化的爬虫平台
    • Jackson0714/PassJava-Platform
      一款面试刷题的 Spring Cloud 开源系统。零碎时间利用小程序查看常见面试题,夯实Java基础。 该项目可以教会你如何搭建SpringBoot项目,Spring Cloud项目。 采用流行的技术,如 SpringBoot、MyBatis、Redis、 MySql、 MongoDB、 RabbitMQ、Elasticsearch,采用Docker容器化部署
    • martin-chips/DimpleBlog
      基于SpringBoot2搭建的个人博客系统
    • zjcscut/octopus
      长链接压缩为短链接的服务
    • xggz/mqr star
      茉莉QQ机器人(简称MQR),采用mirai的Android协议实现的QQ机器人服务,通过web控制机器人的启停和配置
  • 测试解决方案或工具
    • alibaba/jvm-sandbox-repeater
      A Java server-side recording and playback solution based on JVM-Sandbox, 录制/回放通用解决方案
    • vivo/MoonBox
      Moonbox(月光宝盒)是JVM-Sandbox生态下的,基于jvm-sandbox-repeater重新开发的,一款流量回放平台产品。相较于jvm-sandbox-repeater,Moonbox功能更加丰富、数据可靠性更高,同时便于快速线上部署和使用
    • alibaba/testable-mock
      换种思路写Mock,让单元测试更简单
    • shulieTech/Takin
      全链路压测平台,measure online environmental performance test for full-links, Especially for microservices
      • shulieTech/LinkAgent
        a Java-based open-source agent designed to collect data and control Functions for Java applications through JVM bytecode, without modifying applications codes
    • alibaba/virtual-environment
      Route isolation with service sharing, 阿里测试环境服务隔离和联调机制的Kubernetes版实现
  • Spring Cloud/Spring Boot的框架方案/脚手架
    • YunaiV/ruoyi-vue-pro star
      一套全部开源的企业级的快速开发平台。基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 微信小程序,支持 RBAC 动态权限、数据权限、SaaS 多租户、Activiti + Flowable 工作流、三方登录、支付、短信、商城等功能
    • YunaiV/yudao-cloud star
      RuoYi-Vue 全新 Cloud 版本,优化重构所有功能。基于 Spring Cloud Alibaba + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
    • zlt2000/microservices-platform star
      基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户系统架构
    • dromara/lamp-cloud star
      基于Jdk11 + SpringCloud + SpringBoot 的微服务快速开发平台,其中的可配置的SaaS功能尤其闪耀, 具备RBAC功能、网关统一鉴权、Xss防跨站攻击、自动代码生成、多种存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行开发, 支持多服务并行开发,可以作为后端服务的开发脚手架
      • zuihou/lamp-util star
        打造一套兼顾 SpringBoot 和 SpringCloud 项目的公共工具类
    • matevip/matecloud star
      一款基于Spring Cloud Alibaba的微服务架构
    • gavenwangcn/vole
      SpringCloud 微服务业务脚手架
    • liuweijw/fw-cloud-framework star
      基于springcloud全家桶开发分布式框架(支持oauth2认证授权、SSO登录、统一下单、微信公众号服务、Shardingdbc分库分表、常见服务监控、链路监控、异步日志、redis缓存等功能),实现基于Vue全家桶等前后端分离项目工程
    • liuht777/Taroco
      整合Nacos、Spring Cloud Alibaba,提供了一系列starter组件, 同时提供服务治理、服务监控、OAuth2权限认证,支持服务降级/熔断、服务权重
    • mingyang66/spring-parent
      数据库多数据源、Redis多数据源、日志组件、全链路日志追踪、埋点扩展点、Netty、微服务、开发基础框架支持、异常统一处理、返回值、跨域、API路由、监控等
    • budwk/budwk star
      BudWk 原名 NutzWk star,基于国产框架 nutz 及 nutzboot 开发的开源Web基础项目,集权限体系、系统参数、数据字典、站内消息、定时任务、CMS、微信等最常用功能,不庞杂、不面面俱到,使其具有上手容易、开发便捷、扩展灵活等特性,特别适合各类大中小型定制化项目需求
    • yinjihuan/spring-cloud
      《Spring Cloud微服务-全栈技术与案例解析》和《Spring Cloud微服务 入门 实战与进阶》配套源码
    • louyanfeng25/ddd-demo
      《深入浅出DDD》讲解的演示项目,为了能够更好的理解Demo中的分层与逻辑处理,我强烈建议你配合小册来深入了解DDD

更多使用TTL的开源项目 参见 user repos

👷 Contributors

  • Jerry Lee <oldratlee at gmail dot com> @oldratlee
  • Yang Fang <snoop.fy at gmail dot com> @driventokill
  • Zava Xu <zava.kid at gmail dot com> @zavakid
  • wuwen <wuwen.55 at aliyun dot com> @wuwen5
  • rybalkinsd <yan.brikl at gmail dot com> @rybalkinsd
  • David Dai <351450944 at qq dot com> @LNAmp
  • Your name here :-)

GitHub Contributors

More Repositories

1

arthas

Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas
Java
35,294
star
2

easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
Java
32,157
star
3

p3c

Alibaba Java Coding Guidelines pmd implements and IDE plugin
Kotlin
30,344
star
4

nacos

an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
Java
30,212
star
5

canal

阿里巴巴 MySQL binlog 增量订阅&消费组件
Java
28,441
star
6

druid

阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
Java
27,950
star
7

spring-cloud-alibaba

Spring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware.
Java
27,866
star
8

fastjson

FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
Java
25,716
star
9

flutter-go

flutter 开发者帮助 APP,包含 flutter 常用 140+ 组件的demo 演示与中文文档
Dart
23,629
star
10

Sentinel

A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)
Java
22,352
star
11

weex

A framework for building Mobile cross-platform UI
C++
18,271
star
12

ice

🚀 ice.js: The Progressive App Framework Based On React(基于 React 的渐进式应用框架)
TypeScript
17,841
star
13

DataX

DataX是阿里云DataWorks数据集成的开源版本。
Java
15,692
star
14

lowcode-engine

An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系
TypeScript
14,512
star
15

ARouter

💪 A framework for assisting in the renovation of Android componentization (帮助 Android App 进行组件化改造的路由框架)
Java
14,228
star
16

hooks

A high-quality & reliable React Hooks library. https://ahooks.pages.dev/
TypeScript
14,005
star
17

tengine

A distribution of Nginx with some advanced features
C
12,807
star
18

formily

📱🚀 🧩 Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3
TypeScript
11,318
star
19

vlayout

Project vlayout is a powerfull LayoutManager extension for RecyclerView, it provides a group of layouts for RecyclerView. Make it able to handle a complicate situation when grid, list and other layouts in the same recyclerview.
Java
10,800
star
20

COLA

🥤 COLA: Clean Object-oriented & Layered Architecture
Java
9,964
star
21

MNN

MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases in Alibaba
C++
8,656
star
22

ali-dbhub

已迁移新仓库,此版本将不再维护
8,318
star
23

atlas

A powerful Android Dynamic Component Framework.
Java
8,127
star
24

otter

阿里巴巴分布式数据库同步系统(解决中美异地机房)
Java
8,069
star
25

rax

🐰 Rax is a progressive framework for building universal application. https://rax.js.org
JavaScript
7,994
star
26

anyproxy

A fully configurable http/https proxy in NodeJS
JavaScript
7,851
star
27

fish-redux

An assembled flutter application framework.
Dart
7,333
star
28

x-render

🚴‍♀️ 阿里 - 很易用的中后台「表单 / 表格 / 图表」解决方案
TypeScript
7,035
star
29

flutter_boost

FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts
Dart
6,966
star
30

AndFix

AndFix is a library that offer hot-fix for Android App.
C++
6,954
star
31

jvm-sandbox

Real - time non-invasive AOP framework container based on JVM
Java
6,739
star
32

BizCharts

Powerful data visualization library based on G2 and React.
TypeScript
6,066
star
33

freeline

A super fast build tool for Android, an alternative to Instant Run
Java
5,497
star
34

UltraViewPager

UltraViewPager is an extension for ViewPager to provide multiple features in a single ViewPager.
Java
5,003
star
35

jetcache

JetCache is a Java cache framework.
Java
4,774
star
36

AliSQL

AliSQL is a MySQL branch originated from Alibaba Group. Fetch document from Release Notes at bottom.
C++
4,705
star
37

AliOS-Things

面向IoT领域的、高可伸缩的物联网操作系统,可去官网了解更多信息https://www.aliyun.com/product/aliosthings
C
4,583
star
38

dexposed

dexposed enable 'god' mode for single android application.
Java
4,483
star
39

butterfly

🦋Butterfly,A JavaScript/React/Vue2 Diagramming library which concentrate on flow layout field. (基于JavaScript/React/Vue2的流程图组件)
JavaScript
4,445
star
40

QLExpress

QLExpress is a powerful, lightweight, dynamic language for the Java platform aimed at improving developers’ productivity in different business scenes.
Java
4,361
star
41

BeeHive

🐝 BeeHive is a solution for iOS Application module programs, it absorbed the Spring Framework API service concept to avoid coupling between modules.
Objective-C
4,288
star
42

HandyJSON

A handy swift json-object serialization/deserialization library
Swift
4,233
star
43

x-deeplearning

An industrial deep learning framework for high-dimension sparse data
PureBasic
4,185
star
44

Tangram-Android

Tangram is a modular UI solution for building native page dynamically including Tangram for Android, Tangram for iOS and even backend CMS. This project provides the sdk on Android.
Java
4,110
star
45

coobjc

coobjc provides coroutine support for Objective-C and Swift. We added await method、generator and actor model like C#、Javascript and Kotlin. For convenience, we added coroutine categories for some Foundation and UIKit API in cokit framework like NSFileManager, JSON, NSData, UIImage etc. We also add tuple support in coobjc.
Objective-C
4,025
star
46

jstorm

Enterprise Stream Process Engine
Java
3,914
star
47

dragonwell8

Alibaba Dragonwell8 JDK
Java
3,826
star
48

LuaViewSDK

A cross-platform framework to build native, dynamic and swift user interface - 强大轻巧灵活的客户端动态化解决方案
Objective-C
3,707
star
49

fastjson2

🚄 FASTJSON2 is a Java JSON library with excellent performance.
Java
3,673
star
50

Alink

Alink is the Machine Learning algorithm platform based on Flink, developed by the PAI team of Alibaba computing platform.
Java
3,572
star
51

f2etest

F2etest是一个面向前端、测试、产品等岗位的多浏览器兼容性测试整体解决方案。
JavaScript
3,564
star
52

GGEditor

A visual graph editor based on G6 and React
TypeScript
3,414
star
53

GraphScope

🔨 🍇 💻 🚀 GraphScope: A One-Stop Large-Scale Graph Computing System from Alibaba | 一站式图计算系统
C++
3,277
star
54

designable

🧩 Make everything designable 🧩
TypeScript
3,266
star
55

cobar

a proxy for sharding databases and tables
Java
3,210
star
56

macaca

Automation solution for multi-platform. 多端自动化解决方案
3,171
star
57

lightproxy

💎 Cross platform Web debugging proxy
TypeScript
3,111
star
58

pont

🌉数据服务层解决方案
TypeScript
3,035
star
59

higress

🤖 AI Gateway | AI Native API Gateway
Go
2,918
star
60

euler

A distributed graph deep learning framework.
C++
2,849
star
61

sentinel-golang

Sentinel Go enables reliability and resiliency for Go microservices
Go
2,763
star
62

beidou

🌌 Isomorphic framework for server-rendered React apps
JavaScript
2,735
star
63

ChatUI

The UI design language and React library for Conversational UI
TypeScript
2,602
star
64

pipcook

Machine learning platform for Web developers
TypeScript
2,539
star
65

kiwi

🐤 Kiwi-国际化翻译全流程解决方案
TypeScript
2,533
star
66

yugong

阿里巴巴去Oracle数据迁移同步工具(全量+增量,目标支持MySQL/DRDS)
Java
2,504
star
67

jvm-sandbox-repeater

A Java server-side recording and playback solution based on JVM-Sandbox
Java
2,503
star
68

tsar

Taobao System Activity Reporter
C
2,446
star
69

tidevice

tidevice can be used to communicate with iPhone device
Python
2,411
star
70

TProfiler

TProfiler是一个可以在生产环境长期使用的性能分析工具
Java
2,377
star
71

tair

A distributed key-value storage system developed by Alibaba Group
C++
2,179
star
72

dubbo-spring-boot-starter

Dubbo Spring Boot Starter
Java
2,097
star
73

RedisShake

redis-shake is a tool for synchronizing data between two redis databases. Redis-shake 是一个用于在两个 redis之 间同步数据的工具,满足用户非常灵活的同步、迁移需求。
Go
2,077
star
74

uirecorder

UI Recorder is a multi-platform UI test recorder.
JavaScript
2,061
star
75

EasyNLP

EasyNLP: A Comprehensive and Easy-to-use NLP Toolkit
Python
2,052
star
76

AliceMind

ALIbaba's Collection of Encoder-decoders from MinD (Machine IntelligeNce of Damo) Lab
Python
1,967
star
77

LVS

A distribution of Linux Virtual Server with some advanced features. It introduces a new packet forwarding method - FULLNAT other than NAT/Tunneling/DirectRouting, and defense mechanism against synflooding attack - SYNPROXY.
C
1,947
star
78

GCanvas

A lightweight cross-platform graphics rendering engine. (超轻量的跨平台图形引擎) https://alibaba.github.io/GCanvas
C
1,873
star
79

alpha

Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中。框架会自动并发有序地执行这些task,并将执行的结果抛出来。
HTML
1,873
star
80

Tangram-iOS

Tangram is a modular UI solution for building native page dynamically, including Tangram for Android, Tangram for iOS and even backend CMS. This project provides the sdk on iOS platform.
Objective-C
1,863
star
81

testable-mock

换种思路写Mock,让单元测试更简单
Java
1,827
star
82

compileflow

🎨 core business process engine of Alibaba Halo platform, best process engine for trade scenes. | 一个高性能流程编排引擎
Java
1,793
star
83

SREWorks

Cloud Native DataOps & AIOps Platform | 云原生数智运维平台
Java
1,792
star
84

EasyCV

An all-in-one toolkit for computer vision
Python
1,780
star
85

LazyScrollView

An iOS ScrollView to resolve the problem of reusability in views.
Objective-C
1,774
star
86

EasyRec

A framework for large scale recommendation algorithms.
Python
1,764
star
87

ilogtail

Fast and Lightweight Observability Data Collector
C++
1,740
star
88

MongoShake

MongoShake is a universal data replication platform based on MongoDB's oplog. Redundant replication and active-active replication are two most important functions. 基于mongodb oplog的集群复制工具,可以满足迁移和同步的需求,进一步实现灾备和多活功能。
Go
1,714
star
89

xquic

XQUIC Library released by Alibaba is a cross-platform implementation of QUIC and HTTP/3 protocol.
C
1,687
star
90

lowcode-demo

An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系
TypeScript
1,683
star
91

async_simple

Simple, light-weight and easy-to-use asynchronous components
C++
1,662
star
92

havenask

C++
1,586
star
93

clusterdata

cluster data collected from production clusters in Alibaba for cluster management research
Jupyter Notebook
1,554
star
94

mdrill

for千亿数据即席分析
Java
1,538
star
95

kt-connect

A toolkit for Integrating with your kubernetes dev environment more efficiently
Go
1,519
star
96

Virtualview-Android

A light way to build UI in custom XML.
Java
1,455
star
97

yalantinglibs

A collection of modern C++ libraries, include coro_rpc, struct_pack, struct_json, struct_xml, struct_pb, easylog, async_simple
C++
1,431
star
98

tb_tddl

1,410
star
99

react-intl-universal

Internationalize React apps. Not only for Component but also for Vanilla JS.
JavaScript
1,337
star
100

data-juicer

A one-stop data processing system to make data higher-quality, juicier, and more digestible for LLMs! 🍎 🍋 🌽 ➡️ ➡️🍸 🍹 🍷为大语言模型提供更高质量、更丰富、更易”消化“的数据!
Python
1,292
star