/spring-reactive-sample

Spring 5 Reactive playground

Primary LanguageJavaGNU General Public License v3.0GPL-3.0

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.

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

Special Thanks

Specials thanks for Jetbrains's support by contributing an open-source license.