diff --git a/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/java/org/springframework/cloud/launcher/deployer/DeployerProperties.java b/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/java/org/springframework/cloud/launcher/deployer/DeployerProperties.java index 92a9d9c..e916897 100644 --- a/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/java/org/springframework/cloud/launcher/deployer/DeployerProperties.java +++ b/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/java/org/springframework/cloud/launcher/deployer/DeployerProperties.java @@ -34,14 +34,26 @@ import org.springframework.core.Ordered; @ConfigurationProperties(prefix = "spring.cloud.launcher") public class DeployerProperties { + /** + * A set of deployable applications. + */ @NotNull private Map deployables = new LinkedHashMap<>(); + /** + * The names of the deployable applications to actually deploy. + */ @NotNull private List deploy = new ArrayList<>(); + /** + * Flag to say that user only requests a list of deployables. + */ private boolean list = false; + /** + * Time to sleep in a tight loop while waiting for an app to start. + */ private int statusSleepMillis = 300; public boolean isList() { @@ -75,12 +87,12 @@ public class DeployerProperties { public void setStatusSleepMillis(int statusSleepMillis) { this.statusSleepMillis = statusSleepMillis; } - + @PostConstruct public void init() { for (String name : deployables.keySet()) { Deployable deployable = deployables.get(name); - if (deployable.getName()==null) { + if (deployable.getName() == null) { deployable.setName(name); } } @@ -97,14 +109,39 @@ public class DeployerProperties { } public static class Deployable implements Ordered { + /** + * Maven (grab-style) co-ordinates of the deployable application artifact in the + * form "group:artifact[:classifer]:version" (classifer defaults to "jar"). + */ @NotEmpty private String coordinates; + /** + * Name of the deployable application. + */ @NotEmpty private String name; + /** + * Port to listen on. + */ private int port = 0; + /** + * Flag to say that this application must be running before any with higher order + * are launched. + */ private boolean waitUntilStarted; + /** + * The order to deploy this application. Default is unordered (so last). + */ private int order = 0; + /** + * A message to print when the application starts. + */ private String message; + /** + * A map of"negative" properties that apply to all apps when this one is disabled. + * E.g. when eureka is disabled you might want "eureka.client.enabled=false". + */ + private Map disabled = new LinkedHashMap<>(); public String getCoordinates() { return this.coordinates; @@ -155,6 +192,14 @@ public class DeployerProperties { this.message = message; } + public void setDisabled(Map disabled) { + this.disabled = disabled; + } + + public Map getDisabled() { + return disabled; + } + @Override public String toString() { final StringBuffer sb = new StringBuffer("Deployable{"); @@ -163,9 +208,11 @@ public class DeployerProperties { sb.append(", port=").append(this.port); sb.append(", waitUntilStarted=").append(this.waitUntilStarted); sb.append(", order=").append(this.order); + sb.append(", disabled=").append(this.disabled); sb.append(", message=").append(this.message); sb.append('}'); return sb.toString(); } + } } diff --git a/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/java/org/springframework/cloud/launcher/deployer/DeployerThread.java b/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/java/org/springframework/cloud/launcher/deployer/DeployerThread.java index 43622a5..9ad751e 100644 --- a/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/java/org/springframework/cloud/launcher/deployer/DeployerThread.java +++ b/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/java/org/springframework/cloud/launcher/deployer/DeployerThread.java @@ -94,7 +94,8 @@ public class DeployerThread extends Thread { private void list() { DeployerProperties properties = loadCloudProperties(); if (!properties.getDeployables().isEmpty()) { - Collection names = new ArrayList<>(properties.getDeployables().keySet()); + Collection names = new ArrayList<>( + properties.getDeployables().keySet()); System.out.println(StringUtils.collectionToDelimitedString(names, " ")); } } @@ -185,7 +186,8 @@ public class DeployerThread extends Thread { DeployerProperties properties = context.getBean(DeployerProperties.class); - ArrayList deployables = new ArrayList<>(properties.getDeployables().values()); + ArrayList deployables = new ArrayList<>( + properties.getDeployables().values()); OrderComparator.sort(deployables); logger.debug("Deployables {}", properties.getDeployables()); @@ -251,14 +253,12 @@ public class DeployerThread extends Thread { Map appDefProps = new HashMap<>(); appDefProps.put("server.port", String.valueOf(deployable.getPort())); - // TODO: move to notDeployedProps or something - // these could be part of a collection of an interface to augment properties based - // on conditions - if (!shouldDeploy("kafka", properties)) { - appDefProps.put("spring.cloud.bus.enabled", Boolean.FALSE.toString()); - } - if (!shouldDeploy("eureka", properties)) { - appDefProps.put("eureka.client.enabled", Boolean.FALSE.toString()); + // For each of the other deployables, add "negative" properties that apply to all + // apps when it is disabled + for (Deployable other : properties.getDeployables().values()) { + if (!shouldDeploy(other.getName(), properties)) { + appDefProps.putAll(other.getDisabled()); + } } Map map = extractProperties("/" + deployable.getName() + ".yml"); for (String key : map.keySet()) { diff --git a/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/resources/cloud.yml b/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/resources/cloud.yml index 7dd9151..356048d 100644 --- a/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/resources/cloud.yml +++ b/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/resources/cloud.yml @@ -17,6 +17,8 @@ spring: coordinates: ${dt.pre}eureka:${dt.ver} port: 8761 message: To see the dashboard open http://localhost:8761 + disabled: + eureka.client.enabled: false h2: coordinates: ${dt.pre}h2:${dt.ver} port: 9095 @@ -31,6 +33,8 @@ spring: port: 9091 waitUntilStarted: true order: -200 + disabled: + spring.cloud.bus.enabled: false zipkin: coordinates: ${dt.pre}zipkin:${dt.ver} port: 9411