我在Tasklet中编写了一个业务逻辑,在该逻辑中,我向外部Systema的队列之一发送一条消息,然后使用operator.stop()方法停止作业(有时响应来得很晚,所以我通过停止spring批处理作业来释放系统资源)。
一旦收到来自systemA的回复,我需要再次从上次完成的作业重新启动作业。
这就是我在tasklet中所做的。
public RepeatStatus execute(StepContribution stepCon, ChunkContext chunkCtx)
throws Exception {
JobOperator operator= (JobOperator)ApplicationContextProvider.getApplicationContext().getBean("jobOperator");
String msg = "some msg";
//Sending message to channel created using spring integration.
messageChannel.send(MessageBuilder.withPayload(msg).build());
//Stopping job with the job_exe_id 123
operator.stop(123);
ExitStatus es = new ExitStatus("MSG_SENT");
stepCon.setExitStatus(es);
return null;
}
我现在面临的问题是,当消息被发送到systemA队列时,我立即得到systemA的响应,spring Integration的服务激活器被调用,由于某种原因,spring batch DB从未更新为“Stopped”,相反,DB条目将作业的状态显示为“Stopping”,因此我无法在服务激活器中重新启动作业,因为它仍然处于“Stopping”状态。
谁能让我知道为什么spring batch DB没有得到“Stopped”状态的更新。
编辑--我尝试在将消息发送到Systema队列之前停止作业,但SPRING BATCH DB仍然没有更新为“Stopeed”状态。
当我从外部系统获得响应时,我发送消息的tasklet
事务没有提交。
为了解决上述问题,我使用了一个步骤执行监听器,我在tasklet
中完成了所有的数据库更新,并在“afterstep”执行监听器中将消息发送到外部客户机,因此当流到达“afterstep”执行监听器时,tasklet
事务已经提交。
希望这能帮助有需要的人。
我有一个表视图,每次都很好地填充, 我的主控制器: 我的测试类: 扩展测试类并覆盖其运行的Test1类: 我的aHandler: 因为tbl1绑定到Handler。getInstance()。GetData(),第一次初始化该类时,我看到列Test填充了值1,因为TestData=1;但当计时器开始更改测试数据时,表视图不会获得新的赋值。我做错了什么? 我尽我所能解释这个问题,请让我知道,如果它仍
我已经在做我的项目好几个星期了。一切都很好。但今天突然间,我无法加载我更改的一些视图(有些视图可以更改并得到结果)。即使我更换了控制器,它现在仍然工作。根据SO和其他一些网站,我尝试了以下内容 重新启动浏览器 我错过了什么。提前谢谢。
我想简单地通过单击按钮添加新节点(我有jsPlumb源代码endpoint在拖动源代码容器时不会移动,我已经尝试了建议的答案,但仍然不适用于我)。 不幸的是,当我拖动新节点时,endpoint(应该坚持覆盖)没有更新它的位置。endpoint将在我鼠标悬停endpoint后更新它的位置。 这是小提琴 '$('#addNode')。单击(函数(e){var newAgent = $('').attr
当我计算抛物线的新系数时,抛物线的图没有更新。当老鼠是一条抛物线和移动时,计算出新的系数。将显示图形上的新系数,但绘图保持不变。为什么这样?
我在整个应用程序中打开一个游标,在每个SQL语句之前使用,在获取数据之后使用。 如有任何帮助,不胜感激,谢谢!
其行如下: 这意味着,如果用户在date picker控件的文本输入过程中按enter键,那么在用户将数据放入其他控件之前,就会触发事件,我并不特别希望这样。 所以问题是,如果用户在框中输入文本,然后不按Enter就离开框,为什么不改变呢?我找不到在用户离开datepicker框时调用的事件或datepicker的属性来获取控件的文本值并将其与的值进行比较。我是不是漏掉了什么? 这可能是JavaF