This project purpose is to power the MiXiT 2017 website.
This project software design goal is to demonstrate what a functional web application developed with Spring Framework 5 and Kotlin can look like:
- Reactive
- Simple, fast to start, efficient request processing, low memory consumption
- Cloud Native
- Constructor based injection
- More functional style and less annotation based than typical Spring applications
- Immutable Pojos
- Take advantage of Kotlin extensions and reified type parameters
The technologies used are:
- Language: Kotlin
- Web framework: Spring Boot and Spring Web Reactive Functional
- Engine: Netty used for client and server
- Templates: Mustache (will be migrated later to Kotlin typesafe templates)
- Reactive API: Reactor
- Persistence : Spring Data Reactive MongoDB
- Build: Gradle Script Kotlin
- Testing: Junit
- Install Git
- Fork and clone the project
- Install MongoDB
- Install Java 8
- Install Gulp for development mode
- Depending on your platform, you may have to install libpng (On mac with
brew install libpng
for example)
- Run
mongod
- Run
./gradlew bootRun
in another terminal - Run
gulp watch
in another terminal - Open
http://localhost:8080/
in your browser - If you just want to restart the app:
./gradlew bootRun -x gulpBuild
- If you want to debug the app, add
--debug-jvm
parameter to Gradle command line
Sass, TypeScript, messages*.properties
and templates should be live reloaded.
- Make sure you have at least IntelliJ IDEA
2016.3
and IDEA Kotlin plugin1.1.0
(menu Tools -> Kotlin -> configure Kotlin Plugin Updates -> make sure "Stable" channel is selected -> check for updates now -> restart IDE after the update) - Import it in IDEA as a Gradle project and make sure to uncheck "Create Module for each SourceSet" to avoid a nasty bug that prevent to run the app in IDEA
- Run
mongod
in command line - In IntelliJ IDEA, right click on
Application.kt
thenRun ...
orDebug ...
- Run
gulp watch
in another terminal - Open
http://localhost:8080/
in your browser
Sass, TypeScript, messages*.properties
and templates should be live reloaded.
./gradlew clean build
java -jar build/libs/mixit-1.0.0-SNAPSHOT.jar
./gradlew clean build
cf push