Modern Delivery for Modern Java: Give YAML the Boot

Rod Johnson
The Composition
Published in
4 min readSep 25, 2018

It’s never been easier to code Java services. However, whenever we remove one bottleneck, another takes its place. We no longer need to write much Java code for each service. But how do we deliver more and more services in a consistent way, evolving the delivery flow as requirements change? How do we combat entropy in code and configuration across all those services? We’ve gotten rid of all XML and Java verbosity, but watched the YAML tide rise inexorably.

The old model of doing everything per repo in its own pipeline breaks down in a world of microservices. We need policies that apply across services, for both delivery and code maintenance.

Atomist’s new Spring Boot support solves these problems. Atomist’s event-driven approach makes developing, delivering and maintaining Spring Boot applications as easy as Spring Boot makes Java coding.

Atomist, meet Spring Boot

Atomist introduces the concept of a Software Delivery Machine (SDM): an event hub that drives delivery and enables automation around code and everything that happens to it.

An SDM can be extended in TypeScript or JavaScript code, or by installing extension packs. The Spring extension pack adds valuable Spring-related functionality that you can drop into any SDM.

You can run an SDM in local mode — in which case you don’t require an Atomist subscription, but use open source — or in the cloud.

A Better Way to Create Spring Boot Services

In today’s era of fine-grained services, it’s important that project creation is easy and consistent, with new projects adhering to your current standards.

Many turn to Spring Initializr for project creation. It helps, but isn’t ideal. You still need to create repos manually; you can’t establish your own starting points for projects; and if you fork Initializr to get more control you’ll be working at a low level, and will only know if you’re got your changes right when you create new projects and see if they compile. Often there are also steps after creating project bits, such as configuring proxies, that need to be automated.

With traditional technologies, you edit template content and code to manipulate it. The starting point doesn’t resemble the final product. With Atomist, you edit running “seed” projects in the target technology. Atomist clones a seed project and transforms it into a new project in its own repository.

By default, your Spring SDM uses an Atomist seed project. But you can change the referenced repository to your own starting point, which you keep up to date with normal Java tooling.

Atomist enables you to create as many seed projects as you like. With our Spring Boot support, just about any Spring Boot project will work out of the box.

Even if you don’t use any other part of Atomist, seed generation is a radically better approach to project creation for Spring Boot and other technologies, which you can adopt today.

Automatic Delivery

After you’ve created a new application, you’ll see that it’s already running.

Atomist’s policy-based approach means automatic CD for all existing or new Spring boot services. The Spring-enabled SDM knows how to build Spring apps and how to deliver them.

Out of the box, the Spring pack delivers services locally. In production, you can use our Kubernetes or Cloud Foundry support or integrate your own deployment process. In any case, you achieve consistency in how your services are deployed.

Keeping Services Up to Date

All those services drift over time. New versions of Spring Boot are released, sometimes with new best practices. Organizational security policies change. Standards for logging and other configuration change.

Atomist is designed for a world of fine-grained services and can help by running code transforms across one or more services, by inspecting code on every push, and even automatically fixing errors. Examples in the Spring pack include:

  • Keeping Spring Boot versions up to date
  • Spotting violations of Twelve-Factor conventions that might fail cloud deployment
  • Ensuring correct use of current Spring idioms
  • Automatically removing unnecessary annotations

Code transforms also enable exploration of Spring Boot, for example by adding starters with code and configuration required to enable them, via a single command.

You can write your own transforms using our Project API , to ensure your own unique capabilities are rolled out across all your projects.

Customization

You might be thinking that the simple case is easy, but what happens with more complex scenarios? What about your custom requirements?

Fortunately, the Atomist approach is far more extensible than alternatives.

If you’re a Spring user, you understand the value of frameworks. A good framework can provide a consistent model on which it’s possible to build richer and richer things. Atomist does this for your delivery. Because you get to use code rather than a mishmash of YAML and Bash, you can unleash your imagination and coding skills. No more frustrating one-off hacks.

Want to add additional seeds? Additional code checks on every push? Custom security checks? Automatically add license files or apply custom formatting? Want to deploy to different or additional environments? Everything to do with your code and how it gets delivered is extensible through code.

Atomist’s API for software enables you to develop your development experience. You can decide on your team’s ideal experience and make it so.

Where Next

We’ll continue to improve Atomist’s Spring support, with input from the Spring team and Spring community.

The Spring extension pack is just the start. Atomist is developer-driven, and we want to bring the same benefits to other frameworks, beginning with Node.js. The Spring pack README provides a guide to go about supporting other frameworks. Community contributions are welcome.

Make Atomist a part of your personal workflow by installing the CLI. Then make it part of your team by creating an Atomist workspace.

Give YAML the Boot

--

--

Rod Johnson
The Composition

Cofounder and CEO, Atomist. Creator of Spring, Cofounder/CEO at SpringSource (acq by VMW)