From 38d75b7f4e4c4fefd9e0e014f857239b627b192c Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 17 Aug 2021 16:35:00 +0200 Subject: [PATCH] GH-335 Add missing classes and 'exec' option to boot mven plugin --- spring-cloud-stream-binder-rabbit/pom.xml | 3 + .../rabbit/deployer/RabbitDeployer.java | 59 +++++++++++++++++++ ...abbitDeployerEnvironmentPostProcessor.java | 40 +++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/deployer/RabbitDeployer.java create mode 100644 spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/deployer/RabbitDeployerEnvironmentPostProcessor.java diff --git a/spring-cloud-stream-binder-rabbit/pom.xml b/spring-cloud-stream-binder-rabbit/pom.xml index 60d0c07a0..3e4de3806 100644 --- a/spring-cloud-stream-binder-rabbit/pom.xml +++ b/spring-cloud-stream-binder-rabbit/pom.xml @@ -102,6 +102,9 @@ org.springframework.boot spring-boot-maven-plugin + + exec + diff --git a/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/deployer/RabbitDeployer.java b/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/deployer/RabbitDeployer.java new file mode 100644 index 000000000..f31c9a48a --- /dev/null +++ b/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/deployer/RabbitDeployer.java @@ -0,0 +1,59 @@ +/* + * Copyright 2021-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.stream.binder.rabbit.deployer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + + +/** + * Main application class to trigger the deployment of Java Functions based + * user application with RabitMQ bindings. + *
+ *
+ * It is based on Spring Cloud Function + * deploy feature + * + *
+ * All you need to do is to provide few additional properties to assist Spring Cloud Function deployer. + *
+ * For example: + *
+ *
+ *
+ * java -jar spring-cloud-stream-binder-rabbit-deployer/target/spring-cloud-stream-binder-rabbit-deployer-3.2.0-SNAPSHOT.jar\
+ * 		 	--spring.cloud.function.location=/foo/bar/simplestjar-1.0.0.RELEASE.jar
+ * 			--spring.cloud.function.function-class=function.example.UpperCaseFunction
+ *
+ * 
+ * The only required property is 'spring.cloud.function.location'. Every other property is optional and is based on the style of user application. + * For more details on the supported styles of user application please refer to + * + * Deploying a Packaged Function section of Spring Cloud Function. + * + * @author Oleg Zhurakousky + * @since 3.1.2 + * + */ +@SpringBootApplication +public class RabbitDeployer { + + public static void main(String[] args) { + SpringApplication.run(RabbitDeployer.class, args); + } + +} diff --git a/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/deployer/RabbitDeployerEnvironmentPostProcessor.java b/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/deployer/RabbitDeployerEnvironmentPostProcessor.java new file mode 100644 index 000000000..91fead450 --- /dev/null +++ b/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/deployer/RabbitDeployerEnvironmentPostProcessor.java @@ -0,0 +1,40 @@ +/* + * Copyright 2021-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.stream.binder.rabbit.deployer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.env.ConfigurableEnvironment; + +/** + * + * @author Oleg Zhurakousky + * + * @since 3.2 + * + */ +class RabbitDeployerEnvironmentPostProcessor implements EnvironmentPostProcessor { + + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, + SpringApplication application) { + if (!environment.containsProperty("spring.cloud.function.rsocket.enabled")) { + environment.getSystemProperties().putIfAbsent("spring.cloud.function.rsocket.enabled", false); + } + } + +}