From 139d6a5c6adb98e78035deb266e51d8a63ec49bb Mon Sep 17 00:00:00 2001 From: Marius Bogoevici Date: Mon, 7 Sep 2015 09:22:00 -0400 Subject: [PATCH] Add support for 'args.*' --- .../launcher/ModuleLauncherProperties.java | 9 ++++---- .../module/launcher/ModuleLauncherRunner.java | 21 +++++++++++++++++-- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherProperties.java b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherProperties.java index 3c7b8a237..cd3e93274 100644 --- a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherProperties.java +++ b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherProperties.java @@ -59,9 +59,10 @@ public class ModuleLauncherProperties { private String[] modules; /** - * Map of arguments, keyed by the 0-based index in the {@link #modules array}. + * Map of arguments, keyed by the 0-based index in the {@link #modules array}, allowing for an additional generic + * key for global arguments. */ - private Map> args = new HashMap<>(); + private Map> args = new HashMap<>(); public void setModules(String[] modules) { this.modules = modules; @@ -80,11 +81,11 @@ public class ModuleLauncherProperties { return modules; } - public void setArgs(Map> args) { + public void setArgs(Map> args) { this.args = args; } - public Map> getArgs() { + public Map> getArgs() { return args; } diff --git a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherRunner.java b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherRunner.java index 09790202b..eeb492a9e 100644 --- a/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherRunner.java +++ b/spring-cloud-stream-module-launcher/src/main/java/org/springframework/cloud/stream/module/launcher/ModuleLauncherRunner.java @@ -17,6 +17,7 @@ package org.springframework.cloud.stream.module.launcher; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -42,6 +43,8 @@ public class ModuleLauncherRunner implements CommandLineRunner { private final static Log log = LogFactory.getLog(ModuleLauncherRunner.class); + private final static String GLOBAL_ARGS_KEY = "*"; + @Autowired private ModuleLauncherProperties moduleLauncherProperties; @@ -66,9 +69,23 @@ public class ModuleLauncherRunner implements CommandLineRunner { private List generateModuleLaunchRequests() { List requests = new ArrayList<>(); String[] modules = this.moduleLauncherProperties.getModules(); - Map> arguments = this.moduleLauncherProperties.getArgs(); + Map> arguments = this.moduleLauncherProperties.getArgs(); for (int i = 0; i < modules.length; i++) { - ModuleLaunchRequest moduleLaunchRequest = new ModuleLaunchRequest(modules[i], arguments.get(i)); + // merge the global arguments with the module specific arguments + Map moduleArguments = new HashMap<>(); + if (arguments != null) { + // by inserting the global args first and the module specific args next + // we ensure that the latter have precedence + Map globalArgs = arguments.get(GLOBAL_ARGS_KEY); + if (globalArgs != null) { + moduleArguments.putAll(globalArgs); + } + Map moduleSpecificArgs = arguments.get(Integer.toString(i)); + if (moduleSpecificArgs != null) { + moduleArguments.putAll(moduleSpecificArgs); + } + } + ModuleLaunchRequest moduleLaunchRequest = new ModuleLaunchRequest(modules[i], moduleArguments); requests.add(moduleLaunchRequest); } return requests;