当前位置: 首页 > 知识库问答 >
问题:

如何通过cron启动spring批量远程分区作业?

宰父智敏
2023-03-14

我正在使用spring批处理和spring批处理管理我们的日常批处理工作。我使用Tomcat7通过spring批处理管理UI启动作业对其进行了测试。

我的工作有跨不同服务器的远程分区步骤,我使用rabbitmq作为中间件,spring批量集成用于远程分区。

在测试过程中,我在所有服务器上部署应用程序,在所有服务器上启动tomcat,以启动所有监听器(入站网关并发线程),启动所有bean。

现在我想把它移到生产中,所以想把它添加到cron中,它应该在每天凌晨4点自动启动作业。

1)有没有办法使用cron启动作业?

2)在这种情况下,我们是否需要在所有服务器上启动tomcat,或者它可以在没有它的情况下运行?

3)如果我在一个服务器(主服务器)上启动作业,如何在所有服务器上启动bean、消费者等,以便在所有服务器上作为分区步骤运行?

在spring批处理管理示例中,在launch-context.xml中有

<description><![CDATA[
  A convenient aggregating config file for running the jobs in this project
  from the command line instead of from the web application.  E.g.

  $ MAVEN_OPTS="-Dbatch.jdbc.url=jdbc:hsqldb:hsql://localhost:9005/samples -Dbatch.data.source.init=false" \
    mvn exec:java -Dexec.classpathScope=runtime \
    -Dexec.mainClass=org.springframework.batch.core.launch.support.CommandLineJobRunner \
    -Dexec.args="classpath:launch-context.xml job1 fail=false run.id=1"


  ]]>
</description>

<import resource="classpath*:/META-INF/spring/batch/bootstrap/**/*.xml" />
<import resource="classpath*:/META-INF/spring/batch/override/**/*.xml" />

<bean id="jobLauncherTaskExecutor" class="org.springframework.core.task.SyncTaskExecutor"/>

我可以将它用于我的用例吗?

共有1个答案

葛景龙
2023-03-14

该进程需要在所有服务器上运行。

一个解决方案是继续使用Tomcat(并让它们一直运行)。您可以使用spring-batch-admin的ReST API启动批处理作业(例如,从cron中使用curl)。

spring XD项目(即将发布)也提供了一个用于启动批处理作业的ReST API。

 类似资料:
  • spring批处理远程分块和远程分区之间有什么区别? 我无法理解spring batch中远程分块和远程分区之间的区别。谁能解释一下吗?

  • 试着看看我是否能设计一个既需要分区又需要远程分块的工作。我们可以有类似于表A的东西来保存行(表A中的一列将是分区键),对于表A中的每一行,我们将有表B,其中包含表A中给定外部/分区键的许多子记录。我们需要运行一个查询,根据查询过滤表a中的分区键,并为每个分区键处理表B中的所有子记录(这里我们在表B中也会有数百万条记录,因此我们需要并行处理记录,从而实现远程分块) 对于这样的事情,什么是正确的思考s

  • 我想写一个批处理,从一个表读取数据,对数据进行分区,并将其交给一个spring集成工作流。 批处理和集成工作流都是独立的maven项目,集成项目是批处理项目中的依赖项。 我的批处理有一个非常小的作业上下文(xml)。只有一个分区器和一个任务。在这个任务中,我将数据(为了测试目的而硬编码)放入一个spring集成网关。之后,我将消息传递到outbound-channel-adapter中,它只是将消

  • 我们在POC中使用远程分区,处理大约2000万条记录。为了处理这些记录,slave需要一些大约5000行的静态元数据。我们当前的POC使用EhCache从数据库一次将元数据加载到从机中,并将其放入缓存中,这样子用户调用就可以从缓存中获取这些数据,从而获得更好的性能。 现在,由于我们使用远程分区,我们的从机大约有20个MDP/线程,因此每个消息侦听器首先调用以从数据库获取元数据,因此基本上每个远程机

  • 我正在检查spring批处理远程分区,以便从RDBMS源加载数据,以及多分区Kafka主题。我的问题是,我不能用rabbitMQ或JMS作为master和worker节点之间的中间件,我只能用Kafka作为master和worker之间的通道。 在所有文档中,我可以看到它支持JMS和AMQP。谁能告诉我,我们如何使用远程分区与Kafka作为中间穿....如果有人也有工作的例子,那将是一个很大的帮助

  • 我们有一个用例,需要从一些分页的API读取数据,然后写入一些下游的Kafka主题。 我们已经能够通过Spring批处理集成远程分区来实现解决方案,其中管理器通过创建包含页码和偏移量以读取数据的执行上下文来处理任务的分区。管理器创建此执行上下文并将它们放在MessagingChannel上(我可以使用RabbitMQ和Kafka主题,以提供解决方案者为准)。工作人员(超过1个)从MessagingC