如何解决Spring Cloud 任务:任务参数中超过一个空格会导致 StringIndexOutOfBoundsException
我正在使用 SCDF Java DSL 在 Kubernetes 上以编程方式启动任务。我注意到只要任务启动参数有多个空间,SCDF 服务器就会抛出一个 StringIndexOutOfBoundsException
。
示例:
URI dataFlowUri = URI.create(dataFlowServerUri);
DataFlowOperations dataFlowOperations = new DataFlowTemplate(dataFlowUri);
Task task = Task.builder(dataFlowOperations).name(taskNameWithBatchIdInstanceId).definition(taskDefintion).description(taskDescription).build();
Map<String,String> taskLaunchProperties = new DeploymentPropertiesBuilder()
.put("deployer.task.kubernetes.limits.cpu",cpuLimit)
.put("deployer.task.kubernetes.limits.memory",memoryLimit)
.put("deployer.task.kubernetes.requests.cpu",cpuRequest)
.put("deployer.task.kubernetes.requests.memory",memoryRequest).build();
task.launch(taskLaunchProperties,Arrays.asList("inputArgument=ABC CDE FGH"));
我们可以看到上面最后一行传递了 inputArguments=ABC CDE FGH
作为参数。启动此任务会导致 SCDF 服务器上显示以下异常:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1967) ~[na:1.8.0_281]
at org.springframework.cloud.deployer.spi.kubernetes.DefaultContainerFactory.lambda$createCommandArgs$0(DefaultContainerFactory.java:236) ~[spring-cloud-deployer-kubernetes-2.3.3.RELEASE.jar!/:2.3.3.RELEASE]
在客户端,由于 SCDF 服务器遇到 task.launch
,对 500 [no body]
的调用会导致来自服务器的 StringIndexOutOfBoundsException
响应。
经过大量试验,我意识到只有在任务输入参数中有多个空格时才会出现此异常。如果输入参数少于 2 个空格并且在这种情况下不再看到 StringIndexOutOfBoundsException
,我可以启动任务。
task.launch(taskLaunchProperties,Arrays.asList("inputArgument=ABC CDE"));
问题:如何将具有多个空格的输入参数传递给 SCDF 任务?为什么 SCDF 不允许有多个空格的参数?这是一个错误吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。