2. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Introduction
Improving developer productivity
As developers we want to be more productive and use
our time to work on new and interesting things. We make
use of frameworks and tools to avoid reinventing the
wheel.
IDE’s speed up development practices
Frameworks, such as Spring, provide libraries of re-
useable functionality
Code analysis and testing tools support us in
releasing high quality products
3. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Starting a new project can be daunting
No-one likes an empty
editor.
Usually start by copying
similar file from somewhere
else. Change it around until it
complies.
Easy to end up copying
outdated or bad practice.
Example code as a starting
point?
Copying from a more up to
date starting point. Example
may do more/less than we
are interested in.
We may end up combining
multiple examples.
More to do than
dependency setup.
Build files, code, CI
integration, deployment
scripts, etc, etc ….
Local practices, tools and
processes may need
considerable scaffolding.
4. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Help from Tools and Frameworks
Maven archetypes
Various tools offer help with initializing projects or applications
Gradle init plugin
Ruby on Rails
Grails
Quarkus code
dotnet core
…
Spring initializr/start.spring.io
5. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
https://start.spring.io
Web based interface to project generation
service
Generates projects using Spring
Initializr libraries
Supports different build environments
Supports various JVM languages and
runtimes
Generated projects based on Spring
Boot
Dependencies based on Spring Boot
Starters
6. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Type “Brand Center” into your browser
to find the Morgan Stanley image library
listed under the Assets tab.
Welcome to MS Initializr
Additional build environments
7. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Type “Brand Center” into your browser
to find the Morgan Stanley image library
listed under the Assets tab.
Welcome to MS Initializr
Only Java
8. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Type “Brand Center” into your browser
to find the Morgan Stanley image library
listed under the Assets tab.
Welcome to MS Initializr
Restricted Spring Boot versions
9. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Type “Brand Center” into your browser
to find the Morgan Stanley image library
listed under the Assets tab.
Welcome to MS Initializr
Dependencies accessed via in-house
cache of open source repos and locally
produced artifacts
10. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Type “Brand Center” into your browser
to find the Morgan Stanley image library
listed under the Assets tab.
Welcome to MS Initializr
Standard Spring Boot Starters
11. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Type “Brand Center” into your browser
to find the Morgan Stanley image library
listed under the Assets tab.
Welcome to MS Initializr
Starters Developed in-house
12. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Small changes, big impact
Minimal start.spring.io changes required
Mainly configuration changes with minor build file updates
to point to internal repositories.
Developer community very enthusiastic
Lots of requests for more functionality
Could we take things further and simplify adoption
of best practices?
13. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Starting to see possibilities
Generate build files for both
Maven and Gradle.
Generate code to provide the
entry point for a project.
Selectively display content
based on JDK, Spring version
Initializr can already … Could it also ?
Generate default configuration
for CI and deployment
Generate code illustrating best
practice for using selections
Generate different code
depending on selections
14. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
What Lies Behind
Initializr
(Generator)
R
E
S
T
Metadata
15. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
What Lies Behind
Initializr
(Generator)
R
E
S
T
Metadata
16. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
What Lies Behind
Initializr
(Generator)
Metadata
R
E
S
T
$ curl http://...
17. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
How the Generator Works
Project
Description
Generator
Project
Generation
Context
18. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
How the Generator Works
Contributors / Customizers
Project
Description
Generator
Project
Generation
Context
Basic
Project
Template
19. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
How the Generator Works
Contributors / Customizers
Project
Description
Generator
Project
Generation
Context
20. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
How the Generator Works
Contributors / Customizers
Project
Description
Generator
Project
Generation
Context
21. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
How the Generator Works
Contributors / Customizers
Project
Description
Generator
Project
Generation
Context
Project
Archive
22. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Existing functionality supports additional features
Conditional Generation
Based on standard Spring Boot
autoconfiguration with additional
conditionals.
Conditional beans add
customization to project
generation context.
Tied into project metadata and
description
Plugins
Customizers and Contributors
can be packaged into libraries.
Libraries are essentially plugins
which provide groupings of
related functionality through
initializr.
Avoid chaos of too many,
possibly incompatible choices
Customize Generation
Pick appropriate plugins for use
case.
• Reactive vs non-reactive
• CI/CD pipeline
• Deployment target
Development teams can add
their own plugins.
Updating projects
Capturing details of generated
projects allows us to see what is
being used.
Marking sections of generated
files as ‘belonging’ to initializr,
possibility to read back in and
make limited updates
23. SPRING ONE, SEPTEMBER 2020 PUBLIC
Public
Why stop there …
Build multiple applications
Applications commonly made
up of multiple components.
Build more complex systems
with multiple moving parts.
Generate configuration
Question based workflow to
construct configuration. For
example setup routes for
Spring Cloud Gateway.
Extension and migration
Updating existing projects is
really difficult. Could we
support simple migrations?
Extensions to existing apps?