This commit adds a default, empty suppression configuration file needed to set up Checkstyle. Resolves #463
200 lines
8.2 KiB
Plaintext
200 lines
8.2 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<Flux<String>, Flux<String>> uppercase() {
|
|
return flux -> flux.map(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 4 main features:
|
|
|
|
In the nutshell Spring Cloud Function provides the following features:
|
|
1. Wrappers for `@Beans` of type `Function`, `Consumer` and
|
|
`Supplier`, exposing them to the outside world as either HTTP
|
|
endpoints and/or message stream listeners/publishers with RabbitMQ, Kafka etc.
|
|
|
|
* _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._
|
|
* _Compiling strings which are Java function bodies into bytecode, and then turning them into `@Beans` that can be wrapped as above._
|
|
* _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-openwhisk[Apache OpenWhisk] 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
|
|
|
|
:jdkversion: 1.7
|
|
|
|
=== Basic Compile and Test
|
|
|
|
To build the source you will need to install JDK {jdkversion}.
|
|
|
|
Spring Cloud uses Maven for most build-related activities, and you
|
|
should be able to get off the ground quite quickly by cloning the
|
|
project you are interested in and typing
|
|
|
|
----
|
|
$ ./mvnw install
|
|
----
|
|
|
|
NOTE: You can also install Maven (>=3.3.3) yourself and run the `mvn` command
|
|
in place of `./mvnw` in the examples below. If you do that you also
|
|
might need to add `-P spring` if your local Maven settings do not
|
|
contain repository declarations for spring pre-release artifacts.
|
|
|
|
NOTE: Be aware that you might need to increase the amount of memory
|
|
available to Maven by setting a `MAVEN_OPTS` environment variable with
|
|
a value like `-Xmx512m -XX:MaxPermSize=128m`. We try to cover this in
|
|
the `.mvn` configuration, so if you find you have to do it to make a
|
|
build succeed, please raise a ticket to get the settings added to
|
|
source control.
|
|
|
|
For hints on how to build the project look in `.travis.yml` if there
|
|
is one. There should be a "script" and maybe "install" command. Also
|
|
look at the "services" section to see if any services need to be
|
|
running locally (e.g. mongo or rabbit). Ignore the git-related bits
|
|
that you might find in "before_install" since they're related to setting git
|
|
credentials and you already have those.
|
|
|
|
The projects that require middleware generally include a
|
|
`docker-compose.yml`, so consider using
|
|
https://docs.docker.com/compose/[Docker Compose] to run the middeware servers
|
|
in Docker containers. See the README in the
|
|
https://github.com/spring-cloud-samples/scripts[scripts demo
|
|
repository] for specific instructions about the common cases of mongo,
|
|
rabbit and redis.
|
|
|
|
NOTE: If all else fails, build with the command from `.travis.yml` (usually
|
|
`./mvnw install`).
|
|
|
|
=== Documentation
|
|
|
|
The spring-cloud-build module has a "docs" profile, and if you switch
|
|
that on it will try to build asciidoc sources from
|
|
`src/main/asciidoc`. As part of that process it will look for a
|
|
`README.adoc` and process it by loading all the includes, but not
|
|
parsing or rendering it, just copying it to `${main.basedir}`
|
|
(defaults to `${basedir}`, i.e. the root of the project). If there are
|
|
any changes in the README it will then show up after a Maven build as
|
|
a modified file in the correct place. Just commit it and push the change.
|
|
|
|
=== Working with the code
|
|
If you don't have an IDE preference we would recommend that you use
|
|
https://www.springsource.com/developer/sts[Spring Tools Suite] or
|
|
https://eclipse.org[Eclipse] when working with the code. We use the
|
|
https://eclipse.org/m2e/[m2eclipse] eclipse plugin for maven support. Other IDEs and tools
|
|
should also work without issue as long as they use Maven 3.3.3 or better.
|
|
|
|
==== Importing into eclipse with m2eclipse
|
|
We recommend the https://eclipse.org/m2e/[m2eclipse] eclipse plugin when working with
|
|
eclipse. If you don't already have m2eclipse installed it is available from the "eclipse
|
|
marketplace".
|
|
|
|
NOTE: Older versions of m2e do not support Maven 3.3, so once the
|
|
projects are imported into Eclipse you will also need to tell
|
|
m2eclipse to use the right profile for the projects. If you
|
|
see many different errors related to the POMs in the projects, check
|
|
that you have an up to date installation. If you can't upgrade m2e,
|
|
add the "spring" profile to your `settings.xml`. Alternatively you can
|
|
copy the repository settings from the "spring" profile of the parent
|
|
pom into your `settings.xml`.
|
|
|
|
==== Importing into eclipse without m2eclipse
|
|
If you prefer not to use m2eclipse you can generate eclipse project metadata using the
|
|
following command:
|
|
|
|
[indent=0]
|
|
----
|
|
$ ./mvnw eclipse:eclipse
|
|
----
|
|
|
|
The generated eclipse projects can be imported by selecting `import existing projects`
|
|
from the `file` menu.
|
|
|
|
|
|
== Contributing
|
|
|
|
:spring-cloud-build-branch: master
|
|
|
|
Please refer to https://github.com/spring-cloud/spring-cloud-build#contributing[this Spring Cloud documentation]
|
|
to learn more about the licensing, Contributor License Agreement, Code of Conduct, Code Conventions and Checkstyle Configuration.
|