Solace makes it easy to implement production-ready microservices using Spring Boot and Cloud Foundry.

Write Once, Run Anywhere (WORA) was a slogan coined by Sun Microsystems to illustrate the cross-platform benefits of Java.

While in many cases Java lived up to this promise, today we need to Write Once, Deploy/Scale Anywhere.

The bane of many developers (including myself) is the inability to inject operating environment properties into applications. This problem becomes even more pronounced when trying to develop production-ready microservices in the most agile way possible.

Why? Simply put, there are external dependencies (such as messaging) whose information can only be known at runtime.

Imagine creating a simple Spring Boot application that runs on your laptop. This application receives product information from a JMS Queue, does an inventory query and republishes the data to a JMS Topic. Everything works fine so it’s time to integrate it into your Cloud Foundry development environment and let it live in the broader enterprise ecosystem.

I’ll explain by way of example. A few weeks ago I was developing some microservices. I had all the JMS connection properties in a configuration file (application.xml) but needed them to be dynamically injected at runtime by Cloud Foundry (VCAP_Services). Since I was using Solace as my message broker, I was able to use Solace’s Spring Cloud Connectors to look up these values in runtime.

Perfect right? Not quite.

Later that week, I was flying to a customer engagement and the airplane WiFi was so slow I couldn’t use Cloud Foundry. I needed to make progress on my Spring Boot application, so I turned back to my laptop development sandbox which did not have Cloud Foundry… 30 minutes of code modifications later, I was back to using the Solace Spring Boot Starters and able to develop again, but faced a nasty conundrum:

Do I write my application to use properties files or Cloud Foundry?

This deployment dependency revelation had shattered my Write Once, Deploy Anywhere dreams.

All I wanted was to fall back to using a properties file if I was not deployed to Cloud Foundry… and of course not have these time-wasting code changes ever again!

The Solace development team took this feedback and made my dreams come true!

Our Spring Boot Starters now have support for not just properties files, but also Spring Cloud Connectors. Essentially, we check for the existence of VCAP_Services and if it does not exist we fall back to looking for a properties file which defines our URI, Username, Password, etc.

If it does exist, we take advantage of Spring Cloud Connectors to look up these values out of VCAP_Services. All of this is done under the covers in our solace-jms-spring-boot-autoconfigure (or solace-java-boot-autoconfigure if using our jcsmp API).

Pretty slick since it realizes the dream of Write Once, Deploy/Scale Anywhere!

The other key benefit the solace-jms-spring-boot-autoconfigure option provides is the ability to seamlessly integrate into Spring’s JMS framework so that you can focus on writing business value (not JMS boilerplate).

All you have to do is have the requisite Spring (spring-jms) and Solace (solace-jms-spring-boot-autoconfigure) libraries in your classpath and use the @Autowired annotation for a JmsTemplate for sending messages or @JmsListener annotation for receiving.

production-ready microservices with Solace

These new capabilities in our Spring Boot autoconfigure implementation are key to our upcoming support for Spring Cloud Streams.

Stay tuned for that announcement and know that Solace has your back if you’re a developer working to create production-ready microservices!


Learn on-the-go with our latest guide about event-driven microservices:

Event-driven microservice white paper

Jonathan Schabowsky
Field CTO

As Solace’s Field CTO, Jonathan helps companies understand how they can capitalize on the use of event-driven architecture to make the most of their microservices, and deploy event-driven applications into platform-as-a-services (PaaS) environments running in cloud and on-prem environments. He is an expert at architecting large-scale, mission critical enterprise systems, with over a decade of experience designing, building and managing them in domains such as air traffic management (FAA), satellite ground systems (GOES-R), and healthcare.

Based on that experience with the practical application of EDA and messaging technologies, and some painful lessons learned along the way, Jonathan conceived and has helped spearhead Solace’s efforts to create powerful new tools that help companies more easily manage enterprise-scale event-driven systems, including the company’s new event management product: PubSub+ Event Portal.

Jonathan is highly regarded as a speaker on the subject of event-driven architecture, having given presentations as part of SpringOne, Kafka Summit, and API Specs conferences. Jonathan holds a BS Computer Science, Florida State University, and in his spare time he enjoys spending time with his family and skiing the world-class slopes of Utah where he lives.