Cloud Native Diary #15
LLM-powered applications with Java and Spring AI. Updates from GOTO Copenhagen, KCD Denmark, and YOW! Australia.

In Cloud Native Diary, I periodically share my journey working with application development, platform engineering, and cloud native technologies.
In this issue, I'll share some updates about Java and AI, and news from GOTO Copenhagen, KCD Denmark, and YOW! Australia. Let's get to it!
Bluesky
Bluesky has become my primary social media. I've been a user since July 2023, but it's only recently that it really took off. The Java and cloud native communities have been migrating in mass from the other place to Bluesky in the past few months, and the vibes couldn't be better! See you there?
If you're new to Bluesky, I recommend checking these Starter Packs to get you started quickly in building your network:
Java and AI
Java is a modern, powerful language. It's amazing to see how much it evolved over the past few years!
It's amazing to see how much Java has evolved over the past few years π One thing I really like is how more friendly has become for students and new programmers. This is valid Java 24 (with preview features). And you can just run it with "java Main.java" from the command line! #ThisIsJava
β Thomas Vitale βοΈ (@thomasvitale.com) 2024-10-27T22:34:36.201Z
Spring AI is a framework for infusing Java applications with AI capabilities. Since my previous blog post, many great features have been delivered, getting closer and closer to the 1.0.0 release in early 2025. You can try them out in the newly released 5th milestone.

The main work that has been keeping me busy in the Spring AI project is the design and initial implementation of a Modular RAG architecture, inspired by the concept of modularity detailed in the paper Modular RAG: Transforming RAG Systems into LEGO-like Reconfigurable Frameworks. I've been designing a solution for Spring AI that enables developers to seamlessly build and customize RAG systems. Some of the Modular RAG features are already available as a preview in the latest Spring AI release. You can find more information in the documentation. I'll soon start publishing a deep-dive article series on this website about Modular RAG. Stay tuned!
I worked on extending the Ollama integration to support native JSON Structured Output and to manage models directly from your Spring AI application. You can now even let Spring AI pull models for you at startup time, both from the Ollama model library and from Hugging Face.
Ollama supports structured outputs, constraining the model's output to be compliant with a given JSON Schema. I was happy to contribute support for this feature in Spring AI, allowing you to define an explicit JSON Schema or rely on a BeanOutputConverter to generate one for you from a Java class.
β Thomas Vitale βοΈ (@thomasvitale.com) 2024-12-20T18:52:37.827Z
Christian Tzolov and I have been expanding the Ollama integration in Spring AI π now featuring a new option to pull models automatically at startup time, improving the developer experience. It works with LLMs from the Ollama library π¦ and from Hugging Face π€ Read more: spring.io/blog/2024/10...
β Thomas Vitale βοΈ (@thomasvitale.com) 2024-10-22T13:52:08.578Z
I also worked on supporting audio modality in the OpenAI integration, leading to exciting new use cases.

One of the big features released recently is support for the Model Context Protocol (MCP), an open protocol designed by Anthropic to standardize how applications provide context to large language models. The brand new Spring AI MCP project introduces a Java SDK for the Model Context Protocol and provides full integration with Spring AI tools and function calling capabilities.
Introducing #SpringAI #MCP: A Java SDK for the Model Context Protocol! Standardize how your Java applications integrate with LLMs, connect to data sources, and build AI-powered tools. Get started now: spring.io/blog/2024/12...
β Christian Tzolov (@tzolov.bsky.social) 2024-12-11T13:22:38.903Z
My activity contributing features, improvements, and bug fixes to Spring AI continues. I want to thank the Spring AI team for the incredible support I receive and for the insightful and stimulating conversations we have about artificial intelligence and Java.
Since the last issue of Cloud Native Diary, I have contributed several improvements to Spring AI and have more in the backlog.
- Designed and implemented initial features for Modular RAG, consolidating the indexing, pre-retrieval, retrieval, and generation modules (#1604, #1644, #1703, #1767, #1794, #1987).
- Extended the Ollama integration with support for native JSON Structured Output (#1937) and for managing models, including auto-pulling models at startup time (#1532, #1554, #1566, #1570, #1581).
- Extended the OpenAI integration with support for audio modality (#1561).
- Extended the Mistral AI integration with support for vision modality (#1930).
- Introduced null-safety for the ChatClient APIs (#1651, #1654).
- Other improvements and bug fixes (#1538, #1784, #1835, #1988).
If you're interested in building LLM-powered applications with Java and Spring AI, feel free to check out my GitHub repository. It has tons of examples showcasing the many features of Spring AI and demonstrating actual use cases such as classification, semantic search, structured data extraction, question answering with documents, and chatbots.
GOTO Copenhagen
The recording of my presentation at GOTO Copenhagen is now available on YouTube. I talked about building production-ready LLM-powered applications with Java and Spring AI, combining live coding, live inference, and live music!
Struggling with inspiration? What if Java and AI could help? Join @thomasvitale.com to build a "composer assistant," explore AI-driven software design, and live-score a movie scene together.
β GOTO Conferences (@gotocon.com) 2024-12-13T13:00:30.951Z
KCD Denmark
On November 19-20, we held the second KCD Denmark conference and it was a blast! The recordings of all presentations are available on our YouTube channel, check them out!

I have many good memories from the event, but the best one is definitely the moment where we donated 350 000 DKK to Coding Pirates, a no-profit organization dedicated to teaching coding skills to kids and supporting girls in pursuing a career in tech.
Closing KCD Denmark with a very meaningful moment: our donation to Coding Pirates of 350 000 DKK, a no-profit organization giving children and young people the opportunity to improve and enhance their IT skills and creativity π #KCDdenmark @kcddenmark.dk
β Thomas Vitale βοΈ (@thomasvitale.com) 2024-11-20T15:10:44.307Z
YOW! Australia
This month, I had the incredible honor and joy of taking part in the YOW! Conference tour in Australia, going from Melbourne to Brisbane to Sydney.
I'm really excited to share that I'll be speaking at the upcoming YOW! Melbourne, Brisbane and Sydney this December π€© Can't wait to go on this journey to Australia and present about Java and AI with live coding, live music, and live inference π #YOW24 #Java #AI
β Thomas Vitale βοΈ (@thomasvitale.com) 2024-11-22T13:03:26.746Z
Ready for my βConcerto for Java and AIβ a YOW! Melbourne πΉ #yow24
β Thomas Vitale βοΈ (@thomasvitale.com) 2024-12-06T03:11:12.572Z
In each city, I took part in a YOW! Conference and presented about building production-ready, LLM-powered applications with Java and Spring AI, including live coding, live inference, and live music! Check out the slides.
@thomasvitale.com wins at slides. #YOW24
β Holly Cummins (@holly-cummins.bsky.social) 2024-12-12T00:38:43.270Z
My last presentation was at the exact same time as the OpenAI breakdown after releasing the Sora video generation model. One of my demo applications was based on OpenAI. Panic? No way! Since I was using Spring AI, I could easily swap the OpenAI dependency with the Mistral AI one, and everything worked out. Abstractions are great!
5 minutes before going on stage, I notice that OpenAI is down. And my Java demo is relying on that. What to do? No panic! Just swap the Spring AI OpenAI dependency with the Mistral AI one, and the demo is up and running again, ready for my presentation πβοΈ #yow24
β Thomas Vitale βοΈ (@thomasvitale.com) 2024-12-12T02:07:56.459Z
I'm extremely thankful to the organizers for inviting me and for planning such a fantastic tour in eastern Australia. I had the best time meeting the local tech community and sharing a trip with amazing people: fellow speakers (you can find them on Bluesky in this starter pack), organizers, and volunteers. I had the chance to reconnect with old friends and meet many new ones. I'm not gonna lie: it's been really hard adjusting to the daily (winter) life in Denmark after spending two beautiful weeks in sunny Australia!








Cloud Native Ambassador
I'm excited to share that I've been re-accepted as a Cloud Native Ambassador!
Excited to share that Iβve been re-accepted as a #CloudNativeAmbassador! Looking forward to another year of championing Cloud Native and helping it grow even further π #CNCF #KubeCon #CloudNativeCon
β Thomas Vitale βοΈ (@thomasvitale.com) 2024-11-01T07:54:07.387Z