如何配置 spring 来执行重叠的固定速率任务?

2023-11-23

我正在尝试使用 java spring 中的 @Scheduled 注释以固定速率执行任务。然而,默认情况下,如果任务慢于固定速率,Spring 似乎不会以固定速率执行固定速率任务。我可以在弹簧配置中添加一些设置来改变这种行为吗?

example:

@Service
public class MyTask{
    @Scheduled(fixedRate = 1000)
    public void doIt(){
        // this sometimes takes >1000ms, in which case the next execution is late
        ...
    }
}

我有一个解决方法,但似乎不太理想。基本上,我只是用线程池替换默认的单线程执行器,然后我有一个调度方法调用异步方法,因为 @Async 注释允许并发执行:

@Service
public class MyTask{
    @Async
    public void doIt(){
        // this sometimes takes >1000ms, but the next execution is on time
        ...
    }
}

@Service
public class MyTaskScheduler{
    ...
    @Scheduled(fixedRate = 1000)
    public void doIt(){
        myTask.doIt();
    }
}

@Configuration
@EnableScheduling
@EnableAsync
public class MySpringJavaConfig{
    @Bean(destroyMethod = "shutdown")
    public Executor taskScheduler() {
        return Executors.newScheduledThreadPool(5);
    }
}

我的无聊细节真实场景:在我的生产代码中,我有一个任务需要 10 毫秒到 10 分钟之间的时间,具体取决于当前的工作负载。理想情况下,我希望每 1000 毫秒从池中捕获一个新线程,以便并发线程数随着工作负载的增加而增加。显然,我对线程(以及其他控件)有一个上限,以防止事情失控。


The TaskSchedulerAPI(支持一些 Spring 调度行为)似乎是为了防止您请求的行为而定义的

安排给定的Runnable,在指定的执行时调用它 时间以及随后的给定期间。

参数

  • period连续执行任务之间的时间间隔(以毫秒为单位)

随后 and 连续似乎表明只有当前执行完成后才会进行下一次执行。

更重要的是,ScheduledExecutorService#scheduleAtFixedRate(..)(其中内置TaskScheduler实现使用)还说

如果此任务的任何执行时间超过其周期,则 后续执行可能会延迟开始,但不会同时 执行.

因此,还有另一层实现可以阻止您想要的行为。

一种可能的解决方案是定义并提供您自己的解决方案,但我不推荐这种解决方案,因为 API 似乎不是围绕它构建的TaskScheduler这确实同时运行任务。调查@EnableScheduling and SchedulingConfigurer了解如何注册TaskScheduler.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何配置 spring 来执行重叠的固定速率任务? 的相关文章

随机推荐

  • 获取所选 primefaces 数据表行的行号

    我有一个 primefaces 数据表 需要在 JSF 页面中显示 总行数 的 所选行号 我可以使用 rowIndexVar 属性在其中一列中显示行号 但我不知道要显示在行选择的输入文本中分别使用相同的数字 我应该在 JSF 页面或托管 b
  • from utils import label_map_util 导入错误:没有名为 utils 的模块

    我正在尝试运行object detection ipynb输入program 但它是一个普通的python程序 py 它工作得很好 但是当在内部运行时 models research object detection文件夹 但主要问题是当我
  • 如何修复由于 libmysqlclient.15.dylib 未加载而导致的错误?

    我已经升级到 Rails 2 2 2 并安装了 MySQL 2 7 gem 当我尝试运行迁移或启动服务器时看到此错误 dlopen Library Ruby Gems 1 8 gems mysql 2 7 lib mysql bundle
  • 定义和声明有什么区别?

    我不明白两者的含义 A 宣言引入标识符并描述其类型 无论是类型 对象还是函数 声明是编译器需要什么接受对该标识符的引用 这些是声明 extern int bar extern int g int int double f int doubl
  • 检测ajax请求中的重定向?

    我想使用 jQuery 获取 URL 并显式检查它是否响应 302 重定向 但是not按照重定向 jQuery 的 ajax似乎总是遵循重定向 如何防止这种情况发生 并在不遵循重定向的情况下查看重定向 有各种标题为 jquery ajax
  • 如何通过c:set将参数传递给jsp:include? JSP中变量​​的作用域是什么?

    我在welcome jsp上有这个
  • CLLocationManager 委托方法未被调用

    我在用CLLocationManager班级 我有一个简单的类方法来捕获位置 void captureLocation mLocationManager CLLocationManager alloc init mLocationManag
  • AngularJS 压缩 $http post 数据

    我正在创建一个 Ionic 应用程序 需要将大量数据发送到用 php 编写的服务器 我正在寻找一种方法来压缩我发布的数据以加快我的应用程序的速度 我不确定什么是最好的方法 我尝试过LZString但 compressToEncodedURI
  • 在主机上启用 system() 和 exec() 函数?

    我是一名开发人员 我在服务器上构建客户端站点 然后在完成后使用 PHP 脚本将其克隆到客户端服务器 我这次尝试了 但出现了错误 您的主机不允许使用 system 和 exec 功能 知道如何启用此功能吗 我有 cpanel 访问权限 主机帐
  • 在 MVC 5 Razor 视图中调用 JavaScript 函数

    我在另一篇文章中看到 您可以在 razor 代码中调用 JavaScript 函数 如下所示 FunctionName 对我来说 虽然这只输出实际的单词FunctionName 这是我的观点 model PriceCompare Model
  • 禁用鼠标提升

    有没有办法从代码中禁用鼠标升级 从而防止窗口将触摸事件解释为鼠标事件 我在 WPF 应用程序中捕获触摸事件 并且我不希望这些交互影响鼠标指针的可见性和位置 有一个TouchFrameEventArgs SuspendMousePromoti
  • 在运行时调整 QDialog 的大小

    I have a QDialog subclass containing some options of my application Some of the options are core the other are advanced
  • 动态添加可折叠元素

    Source http jquerymobile com demos 1 0a2 docs content content collapsible html当我手动将这样的元素添加到我的代码中时 它会正确显示 但是当我尝试用 jQuery
  • 基于 JSON 模式中枚举值的属性

    我正在构建一个 json 模式定义 它有一组固定的控件 我目前用enum 但是 并非所有属性都与所有控件相关 我只想要求一个options财产如果controlType dropdown schema http json schema or
  • UICollectionView 具有项目间间距的水平滚动

    我正在对我的一些图像使用集合视图 每个图像应以屏幕大小显示 因此一个单元格具有屏幕宽度 这minimumInterItemSpacingflowLayout 的值为 25 所以现在的问题是 如果我滚动 集合视图不会滚动到下一个图像的开头 而
  • std::regex 和双重 ABI

    今天我发现了一个有趣的案例 双 libstdc ABI 影响库的兼容性 长话短说 我有两个在内部使用 std regex 的库 一种是使用 CXX11 ABI 构建的 另一种则不是 当这两个库在一个可执行文件中链接在一起时 它会在启动时崩溃
  • 无法将应用程序安装到模拟器 2.3.3 中:INSTALL_FAILED_DEXOPT

    我用的是最新的adt bundle windows x86 64 20130717 with Android SDK 工具 22 0 4 Android SDK 平台工具 18 我曾尝试在模拟器 2 3 3 上安装应用程序 适用于 ARM
  • 更改轴的颜色

    有没有办法改变 matplotlib 中轴 而不是刻度线 的颜色 我一直在浏览 Axes Axis 和 Artist 的文档 但没有运气 matplotlib 画廊也没有任何提示 任何想法 使用图形时 您可以使用以下方法轻松更改书脊颜色 a
  • 如何在 Clickhouse 数据库上搜索不区分大小写的查询中的字符串?

    我正在使用 PHP 和后端 ClickHouse 数据库开发网站 当我使用类似查询时 它不支持区分大小写的单词 select id comments from discussion where comments LIKE Data not
  • 如何配置 spring 来执行重叠的固定速率任务?

    我正在尝试使用 java spring 中的 Scheduled 注释以固定速率执行任务 然而 默认情况下 如果任务慢于固定速率 Spring 似乎不会以固定速率执行固定速率任务 我可以在弹簧配置中添加一些设置来改变这种行为吗 exampl