Class ScriptRuntimeContext
java.lang.Object
com.codingapi.flow.script.runtime.ScriptRuntimeContext
脚本运行时上下文
线程安全设计: 1. GroovyShell 不是线程安全的,不能在多线程间共享 2. GroovyClassLoader 内部使用全局类缓存,相同脚本同时执行会导致类名冲突 3. 解决方案: - 每次执行创建独立的 GroovyClassLoader 和 GroovyShell 实例 - 使用脚本哈希值进行细粒度同步,避免相同脚本并发执行
性能考虑: - 同粒度同步只影响相同脚本的并发执行,不同脚本可以并发执行 - 创建 ClassLoader 的开销相对较小,现代JVM优化后性能影响可接受
自动清理机制: - 当锁缓存数量超过阈值时自动清理 - 可选的定时清理任务,定期清理不活跃的锁
-
Method Summary
Modifier and TypeMethodDescriptionstatic void清理脚本锁缓存static void禁用自动清理static void启用自动清理<T> T执行脚本static int获取自动清理间隔(秒)static int获取脚本执行总次数static int获取当前锁缓存大小<T> T运行脚本static voidsetMaxLockCacheSize(int maxSize) 设置最大锁缓存数量
-
Method Details
-
run
运行脚本- Type Parameters:
T- 返回类型泛型- Parameters:
script- 脚本内容returnType- 返回类型args- 脚本参数- Returns:
- 脚本执行结果
-
execute
执行脚本线程安全:使用脚本哈希值进行细粒度同步 资源管理:执行完成后确保资源被释放
- Type Parameters:
T- 返回类型泛型- Parameters:
method- 要调用的方法名script- 脚本内容returnType- 返回类型args- 脚本参数- Returns:
- 脚本执行结果
- Throws:
FlowExecutionException- 脚本执行失败时抛出
-
clearLockCache
public static void clearLockCache()清理脚本锁缓存在以下情况下建议调用此方法: 1. 应用关闭时 2. 执行了大量不同的脚本后,避免内存占用过大
-
setMaxLockCacheSize
public static void setMaxLockCacheSize(int maxSize) 设置最大锁缓存数量当锁缓存数量超过此值时,将自动触发清理
- Parameters:
maxSize- 最大锁缓存数量
-
getLockCacheSize
public static int getLockCacheSize()获取当前锁缓存大小- Returns:
- 当前锁缓存大小
-
getExecutionCount
public static int getExecutionCount()获取脚本执行总次数- Returns:
- 脚本执行总次数
-
enableAutoCleanup
public static void enableAutoCleanup()启用自动清理启用后,将定期清理脚本锁缓存,避免内存占用过大
-
disableAutoCleanup
public static void disableAutoCleanup()禁用自动清理禁用后,停止定时清理任务但仍保留阈值触发清理
-
getCleanupIntervalSeconds
public static int getCleanupIntervalSeconds()获取自动清理间隔(秒)- Returns:
- 清理间隔(秒)
-