# Spring Initializr
Spring Initializr -> https://start.spring.io/
## What's Spring Initializr?
- Starting point for creating a Spring project - generates a relatively complex project template so you don't have to.
- Allows you to create a boilerplate project using Maven or Gradle and in Java, Kotlin, or Groovy
- Allows you to select your desired Spring Boot version, whether the latest stable release, or near-term upcoming releases.
- Has a nifty dependency adder in which you can add some base dependencies, such as Spring Data JPA or JDBC, In-Memory databases such as H2, or even the Spring Reactive Web packages like WebFlux.
- You can select the version of Java you want your initial project to be based off of. Has the ability to select the latest, or the LTS versions of `8` or `11`
- You can export the project, or you can view the configuration before hitting the export button to verify if everything looks ok!
## Interestings
**Gradle and Languages**
When you create a Gradle Java or Groovy project, the default language for Gradle is Groovy.
When you create a Kotlin project, the default language for Gradle is Kotlin.
Something to watch out for is that Gradle Kotlin configs (i.e. files `build.gradle.kts` and `settings.gradle.kts`) have much less documentation online around them, and so it might be harder starting out with if you need to make modifications as you go. The reason is that Gradle started out with Groovy and has much more documentation around its original language than with Kotlin, the newcomer.
## Commonly-used Libraries
- Developer Tools
- Spring Boot DevTools
- Lombok
- Web
- Spring Web
- Spring Reactive Web
- Spring Session
- Security
- Spring Security
- Spring Security OAuth2 Client
- SQL
- Spring Data JPA
- Flyway Migration
- H2 Database
- NoSQL
- Spring Data Redis
- Spring Data MongoDB
- Spring Data ElasticSearch
- Messaging
- Spring for RabbitMQ
- Spring for Apache Kafka
- I/O
- Spring Quartz
- Spring cache abstraction
- Ops
- Spring Boot Actuator`
- Testing
- Contract Verifier
- Contract Stub Runner
Why does Spring provide these libraries? Why not use MongoDB or Redis directly? One of the goals of Spring is to provide a streamlined interface to the most commonly-used open-source tools to minimize time spent on configuration and integration.