105 lines
4.1 KiB
Plaintext
105 lines
4.1 KiB
Plaintext
////
|
|
DO NOT EDIT THIS FILE. IT WAS GENERATED.
|
|
Manual changes to this file will be lost when it is generated again.
|
|
Edit the files in the src/main/asciidoc/ directory instead.
|
|
////
|
|
|
|
|
|
:branch: master
|
|
|
|
image::https://travis-ci.org/spring-cloud/spring-cloud-function.svg?branch={branch}[Build Status, link=https://travis-ci.org/spring-cloud/spring-cloud-function]
|
|
|
|
== Introduction
|
|
|
|
Spring Cloud Function is a project with the following high-level goals:
|
|
|
|
* Promote the implementation of business logic via functions.
|
|
* Decouple the development lifecycle of business logic from any specific runtime target so that the same code can run as a web endpoint, a stream processor, or a task.
|
|
* Support a uniform programming model across serverless providers, as well as the ability to run standalone (locally or in a PaaS).
|
|
* Enable Spring Boot features (auto-configuration, dependency injection, metrics) on serverless providers.
|
|
|
|
It abstracts away all of the transport details and
|
|
infrastructure, allowing the developer to keep all the familiar tools
|
|
and processes, and focus firmly on business logic.
|
|
|
|
Here's a complete, executable, testable Spring Boot application
|
|
(implementing a simple string manipulation):
|
|
|
|
[source,java]
|
|
----
|
|
@SpringBootApplication
|
|
public class Application {
|
|
|
|
@Bean
|
|
public Function<String, String> uppercase() {
|
|
return value -> value.toUpperCase();
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
SpringApplication.run(Application.class, args);
|
|
}
|
|
}
|
|
----
|
|
|
|
It's just a Spring Boot application, so it can be built, run and
|
|
tested, locally and in a CI build, the same way as any other Spring
|
|
Boot application. The `Function` is from `java.util` and `Flux` is a
|
|
https://www.reactive-streams.org/[Reactive Streams] `Publisher` from
|
|
https://projectreactor.io/[Project Reactor]. The function can be
|
|
accessed over HTTP or messaging.
|
|
|
|
Spring Cloud Function has the following features:
|
|
|
|
* _Choice of programming styles - reactive, imperative or hybrid._
|
|
* _Function composition and adaptation (e.g., composing imperative functions with reactive)._
|
|
* _Support for reactive function with multiple inputs and outputs allowing merging, joining and other complex streaming operation to be handled by functions._
|
|
* _Transparent type conversion of inputs and outputs._
|
|
* _Packaging functions for deployments, specific to the target platform (e.g., Project Riff, AWS Lambda and more)_
|
|
* _Adapters to expose function to the outside world as HTTP endpoints etc._
|
|
* _Deploying a JAR file containing such an application context with an isolated classloader, so that you can pack them together in a single JVM._
|
|
* _Adapters for https://github.com/spring-cloud/spring-cloud-function/tree/master/spring-cloud-function-adapters/spring-cloud-function-adapter-aws[AWS Lambda], https://github.com/spring-cloud/spring-cloud-function/tree/master/spring-cloud-function-adapters/spring-cloud-function-adapter-azure[Azure], https://github.com/spring-cloud/spring-cloud-function/tree/master/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp[Google Cloud Functions], and possibly other "serverless" service providers._
|
|
|
|
== Getting Started
|
|
|
|
Build from the command line (and "install" the samples):
|
|
|
|
----
|
|
$ ./mvnw clean install
|
|
----
|
|
|
|
(If you like to YOLO add `-DskipTests`.)
|
|
|
|
Run one of the samples, e.g.
|
|
|
|
----
|
|
$ java -jar spring-cloud-function-samples/function-sample/target/*.jar
|
|
----
|
|
|
|
This runs the app and exposes its functions over HTTP, so you can
|
|
convert a string to uppercase, like this:
|
|
|
|
----
|
|
$ curl -H "Content-Type: text/plain" localhost:8080/uppercase -d Hello
|
|
HELLO
|
|
----
|
|
|
|
You can convert multiple strings (a `Flux<String>`) by separating them
|
|
with new lines
|
|
|
|
----
|
|
$ curl -H "Content-Type: text/plain" localhost:8080/uppercase -d 'Hello
|
|
> World'
|
|
HELLOWORLD
|
|
----
|
|
|
|
(You can use `^Q^J` in a terminal to insert a new line in a literal
|
|
string like that.)
|
|
|
|
== Building
|
|
|
|
Unresolved directive in <stdin> - include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/docs/src/main/asciidoc/building.adoc[]
|
|
|
|
== Contributing
|
|
|
|
Unresolved directive in <stdin> - include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/docs/src/main/asciidoc/contributing.adoc[]
|