Creating "The Second Best Place
on the Internet" with Spring Initializr
October 7–10, 2019
Austin Convention Center
@snicol
l
start.spring.io
Demo
The Evolution of Spring Initializr
2013 2019
2013
Spring InitializrInitializer
Initialize
Initializers
Ignore
Ignore All
Add
AutoCorrect
Spelling…
Ignore All
@Grab(“org.springframework.bootstrap:spring-bootstrap-actuator:0.5.0.M1”)
@Grab("org.codehaus.groovy:groovy-ant:2.1.3")
@Controller
@Log
class MainController {
@RequestMapping("/")
@ResponseBody
String home() {
def model = [:]
model["styles"] = [[name: "Standard", value: ""]]
model["styles"] << [name: "Web", value: "web"]
model["styles"] << [name: "Actuator", value: "actuator"]
model["styles"] << [name: "Batch", value: "batch"]
model["styles"] << [name: "JPA", value: "jpa"]
model["types"] = [[name: "Maven POM", value: "pom", selected: true],
[name: "Maven Project", value: "pomproject", selected: false]]
template "home.html", model
}
}
March 2013
March 2013
• First instance spring.cfapps.io
👀
😱
🤷
$
• Single groovy file
• Hard-coded dependencies
• spring run app.groovy
August 2013
• Secured start.spring.io 👍
📦 Time for a release?
📦
Nope!
• Releases are made but…

• Production never runs on release versions!
📦
Blue / Green
📦📦
Blue / Green
📦 📦
Blue / Green
📦 📦
Blue / Green
📦 📦
✍
⤵
💨
🙏
🚜 💾
Commit
Smoke Test
Push
Pray
Code
- 🌍
📦
start.spring.io
Metadata
Generation
Terminal Support
$ spring init
• Dedicated assistance

• Auto-completion support

• Option to list dependencies
March 2014
$ spring init —dependencies=web —build=gradle
🤔
💡
“What if we would curl an instance
and it would return a text?”🤯
“What could you do with that?”
Terminal Support
$ curl https://start.spring.io
Jan 2015
$ http https://start.spring.io
IDE Support
March 2015:
• Spring Tools
May 2016
Jan 2018
• Netbeans

• VSCode

• IntelliJ IDEA
• Smooth quick experience

• No wizard

• Single screen
Web UI
Web UI
March 2013 V1
Web UI
March 2013
June 2015 V2
V1
Web UI
March 2013
June 2015
March 2019
V2
V1
V3
Web UI
March 2019 V3.0.1
Web UI
March 2019 V3.0.1
June 2019 V3.1
Web UI
March 2019 V3.0.1
June 2019
July 2019
V3.1
V3.2
Web UI
March 2019 V3.0.1
June 2019
July 2019
Sept 2019
V3.1
V3.2
V3.3
Web UI
March 2019 V3.0.1
June 2019
July 2019
Sept 2019
V3.1
V3.2
V3.3
2013 2019
Iterations
Single Library
Generator, Web and Actuator
Java migration
Spring Boot team joins the fun, New Generation API spike
Balanced team, new UI, new API!
💩
Iterations
2014
2016
2017
2018
2019
Single Library
Generator, Web and Actuator
Java migration
Spring Boot team joins the fun, New Generation API spike
Balanced team, new UI, new API!
Statistics
 How many projects do we
generate a year?
10K
100K
1M+
 How many projects do we
generate a year?
10K
100K
1M+✔
month
What are the top 3 countries?*
India
US
China
3
4
5
* Sep 2018 - Sep 2019
What’s the client split?*
Web IDECLI
* Sep 2018 - Sep 2019
What’s the client split?*
Web IDECLI
* Sep 2018 - Sep 2019 (without China)
ProjectDescription
✅ Web
✅ JPA
✅ DevTools
✅ Actuator
🤔 A deeper dive
ProjectGenerator
ProjectDescription
ProjectGenerator
ProjectDescription
ProjectGenerationContext
📁
ProjectGenerator
ProjectDescription
ProjectGenerationContext
📁
Contributors / Customizers
ProjectGenerator
ProjectDescription
ProjectGenerationContext
📁
Contributors / Customizers
ProjectGenerator
ProjectDescription
ProjectGenerationContext
📁
Contributors / Customizers
ProjectGenerator
ProjectDescription
ProjectGenerationContext
📁
Demo
Thank you!
https://github.com/snicoll-demos/demo-custom-initializr
#springone@s1p

Creating "The Second Best Place on the Internet" with Spring Initializr