You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Batch LocalTaskLauncher启动报错:参数列表过长

Spring Batch LocalTaskLauncher启动Worker时参数列表过长问题

我在用LocalTaskLauncher启动Spring Batch Worker时遇到参数列表过长的错误,相关核心代码如下:

HashMap<String, String> args = new HashMap<>(request.getDefinition().getProperties());
args.put(JMX_DEFAULT_DOMAIN_KEY, taskLaunchId);
args.put("endpoints.shutdown.enabled", "true");
args.put("endpoints.jmx.unique-names", "true");

try {
      Path workDir = createWorkingDirLocal(request.getDeploymentProperties(), taskLaunchId);
      int port = calcServerPort(request, true, args);

      ProcessBuilder builder =
          buildProcessBuilder(request, args, Optional.empty(), taskLaunchId).inheritIO();

      TaskInstance instance = new TaskInstance(builder, workDir, port);
      if (this.shouldInheritLogging(request)) {
        instance.start(builder);
        log.info("launching task {}
    Logs will be inherited.", taskLaunchId);
      } else {
        instance.start(builder, getLocalDeployerProperties().isDeleteFilesOnExit());
        log.info("launching task {}
   Logs will be in {}", taskLaunchId, workDir);
      }
      running.put(taskLaunchId, instance);

    }

运行测试用例时抛出如下错误:

Encountered an error executing step BatchJob:masterStep in job BatchJob [SimpleAsyncTaskExecutor-1] []
com.example.exceptions.ApplicationException: UNABLE_TO_INITIALIZE_BATCH
    at com.example.batch.tasklauncher.BatchLocalTaskLauncher.launch(BatcLocalTaskLauncher.java:108)
    at org.springframework.cloud.task.batch.partition.DeployerPartitionHandler.launchWorker(DeployerPartitionHandler.java:394)
    at org.springframework.cloud.task.batch.partition.DeployerPartitionHandler.launchWorkers(DeployerPartitionHandler.java:313)
    at org.springframework.cloud.task.batch.partition.DeployerPartitionHandler.handle(DeployerPartitionHandler.java:302)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:137)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:124)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
    at com.sun.proxy.$Proxy340.handle(Unknown Source)
    at org.springframework.batch.core.partition.support.PartitionStep.doExecute(PartitionStep.java:106)
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:208)
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:152)
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:68)
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:68)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:169)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144)
    at org.springframework.batch.core.job.flow.support.state.SplitState$1.call(SplitState.java:94)
    at org.springframework.batch.core.job.flow.support.state.SplitState$1.call(SplitState.java:91)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.io.IOException: Cannot run program "/usr/lib/jvm/jdk-11.0.1/bin/java" (in directory "/tmp/85075662064908/BatchJobworker-65044ddf-f133-4894-a8a6-588ef994c89c"): error=7, Argument list too long
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
    at com.example.batch.tasklauncher.BatchLocalTaskLauncher$TaskInstance.start(BatchLocalTaskLauncher.java:253)
    at com.example.batch.tasklauncher.BatchLocalTaskLauncher.launch(BatchLocalTaskLauncher.java:102)
    ... 26 common frames omitted
Caused by: java.io.IOException: error=7, Argument list too long
    at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
    at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340)
    at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
    ... 29 common frames omitted

技术栈

  • Spring Boot: 2.7.2
  • Spring Batch: 2.7.2
  • Spring Cloud Deployer Local: 2.7.2

已尝试的无效方案

  • 增大系统ARG_MAX值
  • 提高ulimit限制
  • 手动从args映射中移除surefire.test.class.path和java.class.path键,但这些参数仍会被自动传入构建的命令中

核心问题

由于无法减少Master传递给Worker的环境变量大小,请问能否配置LocalTaskLauncher通过JAR清单或argfile传递环境变量?

内容的提问来源于stack exchange,提问作者Abhinav Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:13:32