diff --git a/spring-cloud-launcher/spring-cloud-launcher-dataflow/pom.xml b/spring-cloud-launcher/spring-cloud-launcher-dataflow/pom.xml
index 29a6fc5..bbcdfb9 100644
--- a/spring-cloud-launcher/spring-cloud-launcher-dataflow/pom.xml
+++ b/spring-cloud-launcher/spring-cloud-launcher-dataflow/pom.xml
@@ -17,7 +17,7 @@
- 1.0.1.BUILD-SNAPSHOT
+ 1.0.2.BUILD-SNAPSHOT
diff --git a/spring-cloud-launcher/spring-cloud-launcher-dataflow/src/main/java/org/springframework/cloud/launcher/dataflow/DataFlowApplication.java b/spring-cloud-launcher/spring-cloud-launcher-dataflow/src/main/java/org/springframework/cloud/launcher/dataflow/DataFlowApplication.java
index eb3616c..2176996 100644
--- a/spring-cloud-launcher/spring-cloud-launcher-dataflow/src/main/java/org/springframework/cloud/launcher/dataflow/DataFlowApplication.java
+++ b/spring-cloud-launcher/spring-cloud-launcher-dataflow/src/main/java/org/springframework/cloud/launcher/dataflow/DataFlowApplication.java
@@ -16,10 +16,24 @@
package org.springframework.cloud.launcher.dataflow;
+import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.batch.BatchDatabaseInitializer;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.dataflow.server.EnableDataFlowServer;
+import org.springframework.cloud.dataflow.server.config.features.FeaturesProperties;
+import org.springframework.cloud.dataflow.server.repository.RdbmsTaskDefinitionRepository;
+import org.springframework.cloud.dataflow.server.repository.TaskDefinitionRepository;
+import org.springframework.cloud.dataflow.server.repository.support.DataflowRdbmsInitializer;
+import org.springframework.cloud.task.repository.support.TaskRepositoryInitializer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
/**
* @author Spencer Gibb
@@ -33,4 +47,58 @@ public class DataFlowApplication {
SpringApplication.run(DataFlowApplication.class, args);
}
+ /*
+ * Special case for local H2 with tcp, but not in memory. Create a load of beans that
+ * dataflow doesn't in this case, but probably should (see
+ * https://github.com/spring-cloud/spring-cloud-dataflow/issues/926).
+ */
+ @Configuration
+ @ConditionalOnExpression("#{'${spring.datasource.url:}'.startsWith('jdbc:h2:tcp://localhost:') && !'${spring.datasource.url:}'.contains('/mem:')}")
+ public static class H2ServerConfiguration {
+
+ @Bean
+ public JobRepositoryFactoryBean jobRepositoryFactoryBean(DataSource dataSource,
+ DataSourceTransactionManager dataSourceTransactionManager) {
+ JobRepositoryFactoryBean repositoryFactoryBean = new JobRepositoryFactoryBean();
+ repositoryFactoryBean.setDataSource(dataSource);
+ repositoryFactoryBean.setTransactionManager(dataSourceTransactionManager);
+ return repositoryFactoryBean;
+ }
+
+ @Bean
+ public BatchDatabaseInitializer batchRepositoryInitializer(
+ DataSource dataSource) {
+ return new BatchDatabaseInitializer();
+ }
+
+ @Bean
+ public TaskRepositoryInitializer taskRepositoryInitializer(
+ DataSource dataSource) {
+ TaskRepositoryInitializer taskRepositoryInitializer = new TaskRepositoryInitializer();
+ taskRepositoryInitializer.setDataSource(dataSource);
+ return taskRepositoryInitializer;
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public TaskDefinitionRepository taskDefinitionRepository(DataSource dataSource)
+ throws Exception {
+ return new RdbmsTaskDefinitionRepository(dataSource);
+ }
+
+ @Bean
+ public DataSourceTransactionManager transactionManager(DataSource dataSource) {
+ return new DataSourceTransactionManager(dataSource);
+ }
+
+ @Bean
+ public DataflowRdbmsInitializer dataflowRdbmsInitializer(DataSource dataSource,
+ FeaturesProperties featuresProperties) {
+ DataflowRdbmsInitializer dataflowRdbmsInitializer = new DataflowRdbmsInitializer(
+ featuresProperties);
+ dataflowRdbmsInitializer.setDataSource(dataSource);
+ return dataflowRdbmsInitializer;
+ }
+ }
+
}
diff --git a/spring-cloud-launcher/spring-cloud-launcher-dataflow/src/main/resources/application.yml b/spring-cloud-launcher/spring-cloud-launcher-dataflow/src/main/resources/application.yml
index 0d78565..e64aaff 100644
--- a/spring-cloud-launcher/spring-cloud-launcher-dataflow/src/main/resources/application.yml
+++ b/spring-cloud-launcher/spring-cloud-launcher-dataflow/src/main/resources/application.yml
@@ -1,6 +1,8 @@
server:
port: 9393
+debug: true
+
eureka:
instance:
status-page-url-path: /dashboard #allows you to click on the link in eureka dashboard
@@ -15,7 +17,6 @@ security:
enabled: false
management:
- context-path: /admin
security:
enabled: false
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 9125074..3dfb4ca 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
@@ -142,6 +142,11 @@ public class DeployerProperties {
* E.g. when eureka is disabled you might want "eureka.client.enabled=false".
*/
private Map disabled = new LinkedHashMap<>();
+ /**
+ * A map of "positive" properties that apply to all apps when this one is enabled.
+ * E.g. when h2 is disabled you might want the JDBC URL to be used everywhere.
+ */
+ private Map enabled = new LinkedHashMap<>();
/**
* A list of java options to pass to the jvm command (e.g. java).
* E.g. -Dmy.prop=myval
@@ -213,6 +218,14 @@ public class DeployerProperties {
this.javaOptions = javaOptions;
}
+ public Map getEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(Map enabled) {
+ this.enabled = enabled;
+ }
+
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("Deployable{");
@@ -222,6 +235,7 @@ public class DeployerProperties {
sb.append(", waitUntilStarted=").append(this.waitUntilStarted);
sb.append(", order=").append(this.order);
sb.append(", disabled=").append(this.disabled);
+ sb.append(", enabled=").append(this.disabled);
sb.append(", javaOptions=").append(this.javaOptions);
sb.append(", message=").append(this.message);
sb.append('}');
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 a3ab1fe..323c8cc 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
@@ -304,6 +304,11 @@ public class DeployerThread extends Thread {
appDefProps.putAll(other.getDisabled());
}
}
+ for (Deployable other : properties.getDeployables().values()) {
+ if (shouldDeploy(other.getName(), properties)) {
+ appDefProps.putAll(other.getEnabled());
+ }
+ }
Map map = extractProperties("/" + deployable.getName() + ".yml");
for (String key : map.keySet()) {
appDefProps.put(key, map.get(key));
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 063fa1e..a7ed3cb 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
@@ -1,6 +1,16 @@
dt:
pre: maven://org.springframework.cloud.launcher:spring-cloud-launcher-
ver: ${launcher.version}
+
+deployer:
+ local:
+ envVarsToInherit:
+ - TMP
+ - LANG
+ - LANGUAGE
+ - LC_.*
+ - PATH
+
spring:
cloud:
maven:
@@ -33,6 +43,8 @@ spring:
message: Connect on jdbc:h2:tcp://localhost:9096/./target/test, web console at http://localhost:9095
waitUntilStarted: true
order: -50
+ enabled:
+ spring.datasource.url: jdbc:h2:tcp://localhost:9096/./target/test
hystrixdashboard:
coordinates: ${dt.pre}hystrixdashboard:${dt.ver}
port: 7979
diff --git a/spring-cloud-launcher/spring-cloud-launcher-h2/src/main/java/org/springframework/cloud/launcher/h2/H2Application.java b/spring-cloud-launcher/spring-cloud-launcher-h2/src/main/java/org/springframework/cloud/launcher/h2/H2Application.java
index 2b7c731..a8b9476 100644
--- a/spring-cloud-launcher/spring-cloud-launcher-h2/src/main/java/org/springframework/cloud/launcher/h2/H2Application.java
+++ b/spring-cloud-launcher/spring-cloud-launcher-h2/src/main/java/org/springframework/cloud/launcher/h2/H2Application.java
@@ -16,8 +16,6 @@
package org.springframework.cloud.launcher.h2;
-import java.util.concurrent.atomic.AtomicBoolean;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.h2.server.web.WebServlet;
@@ -25,7 +23,7 @@ import org.h2.tools.Console;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.context.embedded.ServletRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.SmartLifecycle;
import org.springframework.context.annotation.Bean;
@@ -35,6 +33,8 @@ import org.springframework.util.Assert;
import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringUtils;
+import java.util.concurrent.atomic.AtomicBoolean;
+
/**
* @author Spencer Gibb
*/