This is a sandbox project for demonstrating Reactive Streams support in Spring framework and its ecosystem.
The following table list all sample codes related to this post. The sample codes of this post is hosted on my Github account, welcome to star and fork it.
name | description |
---|---|
vanilla | The initial application, includes basic spring-webflux feature, use a main class to start up the application |
vanilla-jetty | Same as vanilla, but use Jetty as target runtime |
vanilla-reactor-netty | Same as vanilla, but use Reactor Netty as target runtime |
vanilla-reactor-netty | Same as vanilla, but use Undertow as target runtime |
java9 | Same as vanilla, Java 9 Flow API support is not ready in Spring 5.0.0.REALESE, planned in 5.0.1, see issue SPR-16052 and the original discussion on stackoverflow |
rxjava | Same as vanilla, but use Rxjava instead of Reactor |
rxjava2 | Same as vanilla, but use Rxjava2 instead of Reactor |
war | Replace the manual bootstrap class in vanilla with Spring ApplicationInitializer , it can be packaged as a war file to be deployed into an external servlet container. |
routes | Use RouterFunction instead of controller in vanilla |
register-bean | Programmatic approach to register all beans in ApplicatonContext at application bootstrap |
data-mongo | Demonstration of Spring Data Mongo reactive support |
data-redis | Demonstration of Spring Data Redis reactive support |
data-cassandra | Demonstration of Spring Data Cassandra reactive support |
data-couchbase | Demonstration of Spring Data Couchbase reactive support |
security | Based on vanilla, add secuirty for spring webflux support |
security-user-properties | Same as secuirty, but use users.properties to store users |
security-method | Replace URI based configuration with method level constraints |
security-data-mongo | Based on data-mongo and security, replace with dummy users in hard codes with Mongo driven store |
multipart | Mutipart request handling and file uploading |
multipart-data-mongo | (PENDING)Multipart and file uploading, but data in Mongo via Spring Data Mongo, waitng for Reactive support for GridFsTemplate |
mvc-thymeleaf | Traditinal web mvc application, use Thymeleaf specific Reactive view resolver to render view |
mvc-freemarker | Traditinal web mvc application, use freemarker as template engine, currently it does not have a reactive view resolver |
sse | Server Send Event and json stream example |
websocket | Reactive WebSocket example |
boot | Switch to Spring Boot to get autoconfiguration of spring-webflux , added extra Spring Data Mongo, Spring Security support |
boot-jetty | Same as boot, but use Jetty as target runtime |
boot-tomcat | Same as boot, but use Tomcat as target runtime |
boot-undertow | Same as boot, but use Undertow as target runtime |
boot-routes | Use RouterFunction instead of the general Controller in boot |
boot-freemarker | Same as mvc-freemarker, but based on Spring Boot |
groovy | Same features as boot, but written in groovy |
client | Demonstration of WebClient to shake hands with backend reactive APIs |
kotlin | Same features as boot, but written in kotlin |
kotlin-gradle | Use kotlin functional approach to declare beans and bootstrap the application programatically |
session | (WIP)More features will be added here |
-
Reactive Streams, official Reactive Streams website
-
Understanding Reactive types, Spring.IO
-
The WebFlux framework, Spring Framework Reference Documentation
-
Reactor Core 3.0 becomes a unified Reactive Foundation on Java 8, Spring.IO
-
Reactive Spring, Spring.IO
-
Three parts of Notes on Reactive Programming by Dave Syer:
-
Kotlin extensions for MongoOperations and ReactiveMongoOperations
I appreciate all contribution from the community, not limited to reporting bugs, filing an issue, etc.
Specials thanks for Jetbrains's support by contributing an open-source license.