Spring Reactive Sample
This is a sandbox project for demonstrating Reactive Streams support in Spring framework and Spring ecosystem.
I've also maintained a series of repos related to ReativeStreams and the latest Spring 5.
- Spring RSocket Sample
- Spring Kotlin Coroutines Example
- Spring Kotlin DSL/Spring Fu Sample
- Spring WebMvc Functional Example
- Angular and Spring Reactive Example
- Spring R2dbc Example(updates for Spring 5.3, Spring Data R2dbc 1.2 and Spring Boot 2.4)
The source codes are updated to Spring 6/Spring Boot 3.0, the Spring Boot 2.7.x based codes are available in a compressed archive and tagged with v1.0.
Docs
Read online: https://hantsy.github.io/spring-reactive-sample/
Sample Codes
The following table list all sample codes related to the above posts.
Spring Samples
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-tomcat | Same as vanilla, but use Reactor Netty as target runtime |
vanilla-undertow | Same as vanilla, but use Undertow as target runtime |
java8 | Java 8 CompletableFuture and @Async example |
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 |
rxjava3 | Same as vanilla, but use Rxjava3 instead of Reactor, since Spring 5.3.0 |
smallrye-mutiny | Same as vanilla, but use SmallRye Mutiny instead of Reactor, since Spring 5.3.10 |
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 the application bootstrap |
data-neo4j | Spring Data Neo4j reactive example |
data-mongo | Spring Data Mongo Reactive example |
data-mongo-pageable | Spring Data Mongo Reactive example with pagination support |
data-mongo-transaction | Spring Data Mongo Reactive example with Transaction support |
data-redis | Spring Data Redis Reactive example |
data-redis-message | Spring Data Redis Reactive Example with ReactiveRedisMessageListenerContainer |
data-cassandra | Spring Data Cassandra Reactive example |
data-couchbase | Spring Data Couchbase Reactive example |
security | Based on vanilla, add Spring Security Reactive support |
security-form | Same as security, login form example |
security-user-properties | Same as security, 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 | Multipart request handling and file uploading |
multipart-data-mongo | Multipart and file uploading, but data in Mongo via Spring Data Mongo Reactive GridFsTemplate |
mvc-thymeleaf | Traditional web application, use Thymeleaf as template engine |
mvc-mustache | Traditional web application, use Mustache as template engine |
mvc-freemarker | Traditional web application, use freemarker as template engine |
sse | Server Send Event example |
websocket | WebSocket example |
web-filter | WebFilter example |
groovy | Written in groovy |
groovy-dsl | Groovy DSL bean definition example |
client | Example of WebClient to shake hands with backend reactive APIs |
kotlin | Written in kotlin |
kotlin-routes | Use kotlin functional approach to declare beans and bootstrap the application programmatically |
kotlin-dsl | Kotlin DSL bean definition example |
session | Spring Session Example |
session-header | Spring Session WebSessionIdResolver Example |
session-data-redis | Spring Data Redis based ReactiveSessionRepository Example |
session-data-mongo | Spring Data Mongo based ReactiveSessionRepository Example |
exception-handler | Exception Handler Example |
integration | Spring Integration Example |
integration-dsl | Spring Integration Java 8 DSL Example |
restdocs | Spring RestDocs Example |
Spring Boot Samples
name | description |
---|---|
boot-start | Spring Boot example, including 3 Maven profiles to switch to Jetty, Tomcat, Undertow as target runtime |
boot-start-routes | Simple RouterFunction example |
boot-mvc-thymeleaf | Same as mvc-thymeleaf, but based on Spring Boot |
boot-mvc-mustache | Same as mvc-mustache, but based on Spring Boot |
boot-mvc-freemarker | Same as mvc-freemarker, but based on Spring Boot |
boot-groovy | Written in Groovy |
boot-kotlin | Written in Kotlin |
boot-kotlin-dsl | Kotlin specific BeanDefinitionDSL Example |
boot-redis | Example of using ReactiveRedisConnection and RouterFunction |
boot-data-redis | Spring Data Redis Example |
boot-data-neo4j | Spring Data Neo4j example (Spring Boot 2.4) |
boot-neo4j | Spring Data Neo4j using ReactiveNeo4jOperations (Spring Boot 2.4) |
boot-neo4j-cypher | Spring Data Neo4j using ReacitveNeo4jClient (Spring Boot 2.4) |
boot-data-cassandra | Spring Data Cassandra Example |
boot-data-couchbase | Spring Data Couchbase Example |
boot-data-elasticsearch | Spring Data ElasticSearch Example |
boot-data-mongo | Spring Data Mongo Example(Repository, Auditing, testcontainers) |
boot-data-mongo-querydsl | Spring Data Mongo Example with QueryDSL support |
boot-data-mongo-gridfs | Spring Data Mongo Example with Gridfs support |
boot-data-mongo-tailable | Spring Data Mongo tailable document example |
boot-exception-handler | Global Exception Handler |
Legacy Codes
Some example codes are becoming deprecated as time goes by, eg. the SDN Rx project which was maintained by the Neo4j team is discontinued now, it is highly recommended to migrate to the official Spring Data Neo4j.
And Spring Data R2dbc 1.2 added a lot of breaking changes, so I created another Spring R2dbc Sample repository to introduce the new features.
Spring removed support of RxJava/RxJava2, and other projects, such as Spring Data will remove RxJava/RxJava2 support soon.
name | description |
---|---|
data-r2dbc | Spring Data R2dbc Example. (Deprecated, go to hantsy/spring-r2dbc-sample to update yourself) |
data-r2dbc-postgresql | Spring Data R2dbc Example, but use PostgreSQL instead(Deprecated) |
boot-r2dbc | Spring Data R2dbc example using DatabaseClient (Deprecated) |
boot-data-r2dbc | Spring Data R2dbc example(Deprecated) |
boot-data-r2dbc-auditing | @EnableR2dbcAuditing example(Deprecated) |
boot-data-r2dbc-postgresql | Same as boot-data-r2dbc, but use PostgresSQL instead(Deprecated) |
boot-data-r2dbc-mysql | Same as boot-data-r2dbc, but use MySQL instead(Deprecated) |
boot-data-r2dbc-mssql | Same as boot-data-r2dbc, but use MS SQL instead(Deprecated) |
boot-neo4j-rx | SDN Rx Example but use ReactiveNeo4jClient (Deprecated) |
boot-neo4j-rx-cypher | SDN Rx Example using Cypher queries(Deprecated) |
boot-data-neo4j-rx | SDN Rx Example(Deprecated) |
rxjava | Same as vanilla, but use Rxjava instead of Reactor |
rxjava-jdbc | Accessing database with rxjava-jdbc. NOTE: rxjava-jdbc is a wrapper of blocking Jdbc APIs |
rxjava2 | Same as vanilla, but use Rxjava2 instead of Reactor |
rxjava2-jdbc | Accessing database with rxjava2-jdbc. NOTE: rxjava2-jdbc is a wrapper of blocking Jdbc APIs |
References
-
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
Special Thanks
Specials thanks for Jetbrains's support by contributing an open-source license.