java - Spring XD - 模块 "source:trigger"无法按预期工作

标签 java spring spring-xd

我对模块“source:trigger”应该如何在 Spring XD 中工作有点困惑。根据文档,您可以提供开始日期和固定延迟,理论上,定义触发器的流应该仅在该时间开始,并根据固定延迟重复自身。

例如:

stream create --name s1 --definition "trigger --date='12/08/14 23:35:00' --fixedDelay=10 | log" --deploy

部署后,该流预计将在 2014 年 12 月 8 日 23:35:00 首次触发(使用日期格式 =“MM/dd/yy HH:mm:ss”);但是,无论什么时间,它都会在部署后立即触发:

23:33:28,409 1.1.0.SNAP  INFO DeploymentsPathChildrenCache-0 server.DeploymentListener - Deploying module 'trigger' for stream 's1'
23:33:28,572 1.1.0.SNAP  INFO DeploymentsPathChildrenCache-0 server.DeploymentListener - Deploying module [ModuleDescriptor@760ca434 moduleName = 'trigger', moduleLabel = 'trigger', group = 's1', sourceChannelName = [null], sinkChannelName = [null], sinkChannelName = [null], index = 0, type = source, parameters = map['date' -> '12/08/14 23:35:00', 'fixedDelay' -> '10'], children = list[[empty]]]
23:33:28,946 1.1.0.SNAP  INFO task-scheduler-9 sink.s1 - 
23:33:28,954 1.1.0.SNAP  INFO Deployer server.StreamDeploymentListener - Deployment status for stream 's1': DeploymentStatus{state=deployed}
23:33:28,955 1.1.0.SNAP  INFO Deployer server.StreamDeploymentListener - Stream Stream{name='s1'} deployment attempt complete

如日志所示,流“s1”实际上于 23:33:28 开始,比预期早。一旦启动,它会按照固定延迟中的配置每 10 秒重复一次:

23:33:38,952 1.1.0.SNAP  INFO task-scheduler-9 sink.s1 - 
23:33:48,956 1.1.0.SNAP  INFO task-scheduler-9 sink.s1 - 
23:33:58,961 1.1.0.SNAP  INFO task-scheduler-4 sink.s1 - 
23:34:08,966 1.1.0.SNAP  INFO task-scheduler-2 sink.s1 - 
23:34:18,969 1.1.0.SNAP  INFO task-scheduler-2 sink.s1 - 
23:34:28,973 1.1.0.SNAP  INFO task-scheduler-1 sink.s1 - 
23:34:38,974 1.1.0.SNAP  INFO task-scheduler-9 sink.s1 - 
23:34:48,979 1.1.0.SNAP  INFO task-scheduler-9 sink.s1 - 
23:34:58,984 1.1.0.SNAP  INFO task-scheduler-9 sink.s1 - 
23:35:08,989 1.1.0.SNAP  INFO task-scheduler-9 sink.s1 - 
23:35:18,993 1.1.0.SNAP  INFO task-scheduler-9 sink.s1 - 
23:35:28,998 1.1.0.SNAP  INFO task-scheduler-1 sink.s1 - 
23:35:39,003 1.1.0.SNAP  INFO task-scheduler-1 sink.s1 - 
23:35:49,009 1.1.0.SNAP  INFO task-scheduler-1 sink.s1 - 
23:35:59,013 1.1.0.SNAP  INFO task-scheduler-1 sink.s1 - 
23:36:09,017 1.1.0.SNAP  INFO task-scheduler-1 sink.s1 - 
23:36:19,022 1.1.0.SNAP  INFO task-scheduler-1 sink.s1 - 

因此,为什么这个流不考虑“日期”参数,而是在部署时触发?这是 Spring XD 中的错误还是预期行为?如果是后者,我如何设置这样的触发器,使其仅在给定时间触发?

顺便说一句,我启动了 Spring XD,将系统属性“user.timezone”设置为“CET”,只是为了确保 Spring XD 使用与我正在工作的时区相同的时区。

最佳答案

您介意指出文档吗?实际上,即使在最新的快照中,我也没有看到该模块的良好文档。

source:trigger模块基于 3 个配置文件:date , cronfixedDelay 。最后一个优先于第一个 TriggerSourceOptionsMetadata :

@Override
public String[] profilesToActivate() {
    if (cron != null) {
        return new String[] { "use-cron" };
    }
    else if (fixedDelay != null) {
        return new String[] { "use-delay" };
    }
    else {
        return new String[] { "use-date" };
    }
}

我猜你想使用PeriodicTrigger#initialDelay 。不幸的是,Spring 选项没有作为 XD 选项公开。

我没有看到任何开箱即用的方法来满足您的要求,而不是使用initialDelay对该模块进行一些自定义。 use-delay 的选项简介。

欢迎筹集JIRA有关 source:trigger 的文档的问题并支持initialDelay .

关于java - Spring XD - 模块 "source:trigger"无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27368351/

相关文章:

spring - Spring Boot 2 中的 EmbeddedServletContainerCustomizer 和 ConfigurableEmbeddedServletContainer

spring - 我应该如何使用 Spring WebClient 代表另一个用户以非交互方式访问受 OAuth 保护的资源?

spring - 如何将 Kerberos 票证传递给 Spring Yarn 应用程序

java - 无法在 xd-singlenode 上使用 spring-data-jpa 部署 spring-xd 处理器模块

java - 如何为 Spring XD 配置 Spring InboundChannelAdapter?

java - 在 JSF 中使用 foreach 循环

java - 如何将自定义执行器注入(inject)到播放应用程序中?

java - 在没有 getValueAt() 并发症的情况下修剪 AbstractTableModel

java - 需要帮助安装和运行 Spring Petcare 示例应用程序

java - 如何获取单独的子节点值