Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Not Just Initializing

218 views

Published on

SpringOne 2020
Elspeth Minty: Head of Java Platform Engineering, Morgan Stanley;
George Ball: Developer, Java Platform Engineering, Morgan Stanley

Published in: Software
  • Be the first to comment

  • Be the first to like this

Not Just Initializing

  1. 1. Not just Initializing Elspeth Minty, George Ball Java Platform Engineering
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 14. SPRING ONE, SEPTEMBER 2020 PUBLIC Public What Lies Behind Initializr (Generator) R E S T Metadata
  15. 15. SPRING ONE, SEPTEMBER 2020 PUBLIC Public What Lies Behind Initializr (Generator) R E S T Metadata
  16. 16. SPRING ONE, SEPTEMBER 2020 PUBLIC Public What Lies Behind Initializr (Generator) Metadata R E S T $ curl http://...
  17. 17. SPRING ONE, SEPTEMBER 2020 PUBLIC Public How the Generator Works Project Description Generator Project Generation Context
  18. 18. SPRING ONE, SEPTEMBER 2020 PUBLIC Public How the Generator Works Contributors / Customizers Project Description Generator Project Generation Context Basic Project Template
  19. 19. SPRING ONE, SEPTEMBER 2020 PUBLIC Public How the Generator Works Contributors / Customizers Project Description Generator Project Generation Context
  20. 20. SPRING ONE, SEPTEMBER 2020 PUBLIC Public How the Generator Works Contributors / Customizers Project Description Generator Project Generation Context
  21. 21. SPRING ONE, SEPTEMBER 2020 PUBLIC Public How the Generator Works Contributors / Customizers Project Description Generator Project Generation Context Project Archive
  22. 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. 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?

×