关于spring batch tasklet与Task-Executor的步骤,我遇到了一个奇怪的问题。配置是正常和简单的,只是一个tasklet(不是面向块的),如下所示:
<batch:job id="MyJob" restartable="false">
<batch:step id="MyJob.Step1">
<batch:tasklet ref="someBean" task-executor="simpleAsyncTaskExecutor" throttle-limit="1"/>
</batch:step>
</batch:job>
someBean是一个实例实现的Tasklet接口。stange的问题是,当我启动作业时,execute方法调用了两次:
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
// some logic and no exception
return RepeatStatus.FINISHED;
}
实际上,创建了两个线程,并执行了两次该逻辑。如果将task-executor更改为普通的task-executor=“synctaskexecutor”
(org.springframework.core.task.synctaskexecutor),则只创建一个线程并调用execute()一次。
有人遇到这个案子并能给出一些想法吗?我真的不知道“谁”和“什么时候”创建了两个线程?谢谢
当指定异步任务执行器
时,tasklet将由多个线程并发执行。该限制可以使用节流限制设置,它的默认值为4。在您的情况下,两个线程将执行该任务。
另一方面,SyncTaskExecutor
将在调用线程中运行tasklet,这意味着只运行一次,因为没有创建其他线程。
我有一个文件列表和一个分析这些文件的分析器列表。文件数量可以很大(200,000),分析器数量可以很大(1000)。所以操作总数可能非常大(200,000,000)。现在,我需要应用多线程来加快速度。我采用了这种方法: 但这种方法的问题是,它占用了太多的内存,我想有更好的方法可以做到这一点。我还是java和多线程的初学者。
我想写一个Gradle任务,在我所有的子项目中共享。此任务在调用它的子项目中查找所有其他类型为“GenerateMavenPom”的任务,并执行这些任务。 通过这样做,我的子项目可以定义他们想要的任何Maven发布,我可以使用“gradle GenerateMavenPomFiles”等单个任务执行gradle来创建pom.xml,而不需要知道每个子项目中的单个发布类型。为什么?因为Maven插件
我无法找到必要的信息,无论是在文档中还是在这里已经存在的问题中,这就是为什么我自己创建了一个(我还不能在类似的帖子下提问)。 我需要知道的是Spring任务执行器和调度器之间的关系。我当前的配置如下所示: 我不确定的是它是如何工作的。“谁”运行我的任务?是调度器,因为任务是和他一起安排的吗?或者调度器只是创建它们,放在队列中,由执行者运行它们? 如果没有,运行的是scheduler,我必须在特定类
我检查了其他几个类似的问题,但没有找到解决方案。 因此,我有一个配置了web服务的spring boot项目: ServiceImpl,例如: 服务运行良好。 我的POM实现如下所示: 主要类别: 到目前为止,一切都很好-WS是可达的,但如果我添加到POM: 应用程序启动,我可以在日志中看到: endpoint处理程序映射:映射”{[/info EndpointHandlerMapping:映射的
我是Apache Flink的新手,所以我目前正在尝试做一些实验。我正在读Kafka的一个主题,然后在控制台上打印出来。打印大约100kkafka消息后,它抛出异常。日志输出如下。 我正在使用一个自定义类来扩展AbstractDeserializationSchema,以反序列化kafka记录值。我甚至尝试过在其中添加一些异常处理,但没有触发。 我使用Kafka的代码非常简单: 即使在异常之后,输