MiXiT website
This project purpose is to power the MiXiT website.
Software design
This project software design goal is to demonstrate what a functional web application developed with Spring Boot 2, Spring WebFlux and Kotlin can look like:
- Reactive and non-blocking
- More functional style and less annotation based than typical Spring applications
- Leverage Kotlin features like Kotlin extensions and reified type parameters for cleaner code
- Simple, fast to start, efficient request processing, low memory consumption
- Constructor based injection
- Immutable Pojos
- Cloud Native
Technologies used
- Language: Kotlin
- Framework: Spring Boot 2.0 with Spring 5 Kotlin support and Spring WebFlux 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 5
TODO
- Use Kotlin Javascript with []dead code elimination](https://kotlinlang.org/docs/reference/javascript-dce.html) tool
Developer guide
Prerequisite
- Install Git
- Fork and clone the project
- Install Java 8
- Install Gulp for development mode
- Depending on your platform, you may have to install libpng (On mac with
brew install libpng
or on Ubuntu your need to install libpng12 with this package because the default one is too recent)
Run the app in dev mod using command line
- Run
./gradlew bootRun
in another terminal - Run
gulp watch
in another terminal - Open
http://localhost:8080/
in your browser - 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.
Import and run the project in IDEA
- Make sure you have at least IntelliJ IDEA
2017.2.x
and IDEA Kotlin plugin1.1.4+
(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
- 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.
Package and run the application from the executable JAR:
./gradlew clean build
java -jar build/libs/mixit-1.0.0-SNAPSHOT.jar
Deploy the app on Cloud Foundry
./gradlew clean build
cf push
Copy PROD data to src/main/resources/data
curl https://mixitconf.org/api/blog | python -m json.tool > blog.json
curl https://mixitconf.org/api/event | python -m json.tool > events.json
curl https://mixitconf.org/api/user | python -m json.tool > users.json
curl https://mixitconf.org/api/2017/talk | python -m json.tool > talks_2017.json
commit -a -m "Update data from PROD"