<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SivaLabs</title><link>https://www.sivalabs.in/</link><description>Recent content on SivaLabs</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 30 Oct 2026 10:08:57 +0530</lastBuildDate><atom:link href="https://www.sivalabs.in/rss.xml" rel="self" type="application/rss+xml"/><item><title>Harness Engineering for Java and Spring Boot Applications</title><link>https://www.sivalabs.in/blog/harness-engineering-for-java-and-spring-boot-applications/</link><pubDate>Thu, 29 Oct 2026 06:00:00 +0530</pubDate><guid>https://www.sivalabs.in/blog/harness-engineering-for-java-and-spring-boot-applications/</guid><description>&lt;p&gt;I want to accelerate development using AI coding agents, but I don&amp;rsquo;t want to give up on code quality to get there. Generating code faster is useful only if I can keep the application understandable, maintainable, and correct as it grows.&lt;/p&gt;
&lt;p&gt;An agent can implement a feature, generate tests, and refactor several classes in a few minutes. Reviewing all those changes carefully still takes time. If every review requires me to point out formatting issues, explain package boundaries again, and ask for missing authorization tests, I have moved the bottleneck rather than removed it.&lt;/p&gt;</description></item><item><title>Spring Boot Tips: Easiest Way To Provide Environment Variables</title><link>https://www.sivalabs.in/blog/spring-boot-tips-easiest-way-to-provide-env-vars/</link><pubDate>Wed, 02 Sep 2026 06:00:00 +0530</pubDate><guid>https://www.sivalabs.in/blog/spring-boot-tips-easiest-way-to-provide-env-vars/</guid><description>&lt;p&gt;Spring Boot has excellent support for &lt;a href="https://docs.spring.io/spring-boot/reference/features/external-config.html"&gt;externalized configuration&lt;/a&gt;.
You can supply configuration through properties files, YAML files, environment variables, command-line arguments, and several other sources.&lt;/p&gt;


&lt;svg width="0" height="0" display="none" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;symbol id="tip-box" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet"&gt;
 &lt;path
 d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/&gt;
 &lt;/symbol&gt;
 &lt;symbol id="important-box" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet"&gt;
 &lt;path
 d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;
 &lt;/symbol&gt;
 &lt;symbol id="warning-box" viewBox="0 0 576 512" preserveAspectRatio="xMidYMid meet"&gt;
 &lt;path
 d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;
 &lt;/symbol&gt;
 &lt;symbol id="info-box" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet"&gt;
 &lt;path
 d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/&gt;
 &lt;/symbol&gt;
&lt;/svg&gt;&lt;div class="box box-shortcode info" &gt;
 &lt;span class="icon-box baseline"&gt;
 &lt;svg&gt;&lt;use href="#info-box"&gt;&lt;/use&gt;&lt;/svg&gt;
 &lt;/span&gt;
 &lt;p&gt;&lt;strong&gt;Spring Boot Configuration Management Best Practices&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Explore &lt;a href="https://blog.jetbrains.com/idea/2026/08/spring-boot-configuration-management-best-practices/"&gt;Spring Boot Configuration Management Best Practices&lt;/a&gt; to learn more.&lt;/p&gt;
 &lt;/div&gt;

&lt;p&gt;That flexibility is useful, but local development still presents a small annoyance: where should you define environment variables?&lt;/p&gt;
&lt;p&gt;You could export them from &lt;code&gt;.bashrc&lt;/code&gt; or &lt;code&gt;.zshrc&lt;/code&gt;, but then they affect every terminal session.
You could configure them in your IDE, but each run configuration and each developer may need the same setup.&lt;/p&gt;
&lt;p&gt;For local development, I usually prefer a small file in the project directory.&lt;/p&gt;</description></item><item><title>Spring AI : Advisors API</title><link>https://www.sivalabs.in/blog/spring-ai-advisors-api/</link><pubDate>Thu, 30 Jul 2026 06:00:00 +0530</pubDate><guid>https://www.sivalabs.in/blog/spring-ai-advisors-api/</guid><description>&lt;p&gt;Once an AI feature moves beyond a demo, the model call is rarely the whole story.&lt;/p&gt;
&lt;p&gt;You need to log requests, restore conversation history, retrieve relevant documents, reject unsafe input, record metrics, and perhaps validate the model&amp;rsquo;s output.
Putting all of that code directly around every &lt;code&gt;ChatClient&lt;/code&gt; call works for a while. Then a second endpoint arrives, followed by streaming, and suddenly every model call has its own slightly different pile of plumbing.&lt;/p&gt;</description></item><item><title>Spring AI : Chat Memory</title><link>https://www.sivalabs.in/blog/spring-ai-chat-memory/</link><pubDate>Sat, 25 Jul 2026 06:00:00 +0530</pubDate><guid>https://www.sivalabs.in/blog/spring-ai-chat-memory/</guid><description>&lt;p&gt;Large language models are stateless. Send two independent requests to a model, and the second request knows nothing about the first one.
That is perfectly fine for one-shot questions, but it makes a chatbot feel surprisingly forgetful:&lt;/p&gt;</description></item><item><title>Spring AI : Structured Output</title><link>https://www.sivalabs.in/blog/spring-ai-structured-output/</link><pubDate>Wed, 22 Jul 2026 06:00:00 +0530</pubDate><guid>https://www.sivalabs.in/blog/spring-ai-structured-output/</guid><description>&lt;p&gt;Chat models are great at producing prose, but most applications don&amp;rsquo;t want prose — they want a Java object, a &lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;, or a &lt;code&gt;Map&lt;/code&gt; they can bind to a response and return from a REST API.&lt;/p&gt;
&lt;p&gt;Spring AI&amp;rsquo;s &lt;strong&gt;Structured Output Converters&lt;/strong&gt; bridge that gap: they turn plain-text chat responses into typed Java objects, without you having to hand-write a JSON parser or repeat &amp;ldquo;please respond with valid JSON&amp;rdquo; in every prompt.&lt;/p&gt;</description></item><item><title>Spring AI : Chat with LLMs</title><link>https://www.sivalabs.in/blog/spring-ai-chat-with-llms/</link><pubDate>Mon, 20 Jul 2026 06:00:00 +0530</pubDate><guid>https://www.sivalabs.in/blog/spring-ai-chat-with-llms/</guid><description>&lt;p&gt;Calling an LLM is just an HTTP request. The trouble is that every provider has its own API,
configuration, and response format.&lt;/p&gt;
&lt;p&gt;Spring AI handles that provider-specific plumbing and gives us a familiar Spring API. In this article,
we will use &lt;code&gt;ChatClient&lt;/code&gt; to talk to OpenAI&amp;rsquo;s GPT-5 model and then make our prompts reusable with
&lt;code&gt;PromptTemplate&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Support Me</title><link>https://www.sivalabs.in/support/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0530</pubDate><guid>https://www.sivalabs.in/support/</guid><description>&lt;p&gt;If my articles, videos, or tutorials helped you solve a problem or learn something new, consider buying me a coffee. Your support helps me keep creating free tutorials, videos, and open-source projects for the Java community.&lt;/p&gt;</description></item><item><title>Books</title><link>https://www.sivalabs.in/books/</link><pubDate>Thu, 09 Jul 2026 00:00:00 +0530</pubDate><guid>https://www.sivalabs.in/books/</guid><description>&lt;p&gt;I have written books focused on helping developers learn Java and Spring Boot through practical examples.&lt;/p&gt;</description></item><item><title>Conferences</title><link>https://www.sivalabs.in/conferences/</link><pubDate>Thu, 09 Jul 2026 00:00:00 +0530</pubDate><guid>https://www.sivalabs.in/conferences/</guid><description>&lt;p&gt;I speak at developer conferences, Java user groups, meetups, and internal engineering events on Java, Spring Boot,
Architecture, Testing, and Developer Productivity.&lt;/p&gt;
&lt;h2 id="speaker"&gt;Speaker&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=xWz-vXnKvEo"&gt;GIDS 2026 - Spring AI + MCP: Building the Missing Bridge Between Java Apps and AI Agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://2026.springio.net/sessions/skyrocket-developer-productivity-with-spring-boot-and-intellij-idea/"&gt;Spring I/O 2026 - Skyrocket Developer Productivity with Spring Boot &amp;amp; IntelliJ IDEA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ZFCbYLmLRKs"&gt;Naija JUG - Spring Boot : &amp;ldquo;From Beginner to Pro&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=LOrTLDpVbAA"&gt;GIDS 2025 - Building Modular Monoliths using Spring Modulith&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=YCOXns1l_Us"&gt;Livestream: Productivity Hacks for Spring Boot Application Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=r0GckYxLugQ"&gt;Podcast with Josh Long&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=i0pokvrl4xc"&gt;Podcast with Dan Vega and DaShaun Carter on Spring Office Hours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=VvWtoaeHQUQ"&gt;Livestream: Developing Spring Boot Applications With Joy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.meetup.com/bangalorejug/events/298925096/"&gt;Bangalore JUG - Modern Spring Boot Application Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.meetup.com/bangalorejug/events/300267722/"&gt;Bangalore JUG - Modern Spring Boot Application development with JDK 21&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.meetup.com/jughyderabad/events/300108982/"&gt;Hyderabad JUG - Harnessing the Power of Java 21 and Spring Boot 3 for Modern Software Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="topics"&gt;Topics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Modern Spring Boot application development&lt;/li&gt;
&lt;li&gt;Building modular monoliths and microservices&lt;/li&gt;
&lt;li&gt;Testing Spring Boot applications with Testcontainers&lt;/li&gt;
&lt;li&gt;Practical architecture for backend systems&lt;/li&gt;
&lt;li&gt;Developer productivity and engineering practices&lt;/li&gt;
&lt;li&gt;Getting started with AI-assisted development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you would like me to speak at your event, reach out through the social links on this site.&lt;/p&gt;</description></item><item><title>Courses</title><link>https://www.sivalabs.in/courses/</link><pubDate>Thu, 09 Jul 2026 00:00:00 +0530</pubDate><guid>https://www.sivalabs.in/courses/</guid><description>&lt;p&gt;Free video courses from the SivaLabs YouTube channel.&lt;/p&gt;</description></item><item><title>Projects</title><link>https://www.sivalabs.in/projects/</link><pubDate>Wed, 08 Jul 2026 06:36:31 +0000</pubDate><guid>https://www.sivalabs.in/projects/</guid><description>&lt;h2 id="1-testcontainers-jooq-codegen-maven-plugin"&gt;&lt;a href="https://github.com/sivalabs/testcontainers-jooq-codegen-maven-plugin"&gt;1. testcontainers-jooq-codegen-maven-plugin&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A Maven plugin to run jOOQ code generation using Testcontainers, so database schema-based code generation can run consistently without requiring a locally installed database.&lt;/p&gt;
&lt;h2 id="2-sivalabs-agent-skills"&gt;&lt;a href="https://github.com/sivaprasadreddy/sivalabs-agent-skills"&gt;2. sivalabs-agent-skills&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A collection of Agent Skills and guidelines for Java/Spring Boot application development.&lt;/p&gt;
&lt;h2 id="3-sdd-skills"&gt;&lt;a href="https://github.com/sivaprasadreddy/sdd-skills"&gt;3. sdd-skills&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Agent Skills supporting Spec Driven Development with AI Agents.&lt;/p&gt;
&lt;h2 id="4-progen"&gt;&lt;a href="https://github.com/sivaprasadreddy/progen"&gt;4. progen&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A project generator CLI tool for quickly creating Spring Boot applications with common best practices baked in.&lt;/p&gt;</description></item><item><title>AI Agents Are Doing The Heavy Lifting, Then Why Am I So Tired?</title><link>https://www.sivalabs.in/blog/ai-agents-are-doing-the-heavy-lifting/</link><pubDate>Tue, 30 Jun 2026 04:59:17 +0530</pubDate><guid>https://www.sivalabs.in/blog/ai-agents-are-doing-the-heavy-lifting/</guid><description>&lt;p&gt;I love writing code.&lt;/p&gt;
&lt;p&gt;Not just because it pays the bills.&lt;/p&gt;
&lt;p&gt;I genuinely enjoy the process.&lt;/p&gt;
&lt;p&gt;Give me a use case, let me think about the design, write a failing test, make it pass, refactor, move classes around,
rename things, delete half the code I wrote an hour ago, run the test suite again, smile because everything is still green&amp;hellip;
and I can happily spend an entire day doing that.&lt;/p&gt;</description></item><item><title>Confessions of an AI Agent FOMO Survivor</title><link>https://www.sivalabs.in/blog/confessions-of-an-ai-agent-fomo-survivor/</link><pubDate>Mon, 22 Jun 2026 04:59:17 +0530</pubDate><guid>https://www.sivalabs.in/blog/confessions-of-an-ai-agent-fomo-survivor/</guid><description>&lt;p&gt;Every morning, I open X/Twitter, LinkedIn, or YouTube and learn about a brand-new AI engineering discipline that apparently everyone else has already mastered.&lt;/p&gt;
&lt;p&gt;A few months ago it was Prompt Engineering.&lt;/p&gt;
&lt;p&gt;Then came Context Engineering.&lt;/p&gt;
&lt;p&gt;Soon after, people started talking about &lt;strong&gt;Agent Skills, Harness Engineering, Loop Engineering, Ralph Wiggum Loops, Sub-Agent Architectures, Agentic Workflows, Cognitive Tooling&lt;/strong&gt;, and probably three more terms while I was writing this sentence.&lt;/p&gt;
&lt;p&gt;At this point I fully expect to wake up tomorrow and discover that &amp;ldquo;Recursive Quantum Harness Context Loop Engineering&amp;rdquo; is the new must-have skill for AI developers.&lt;/p&gt;</description></item><item><title>Don't Pollute Your Spring Boot Main EntryPoint Class</title><link>https://www.sivalabs.in/blog/dont-pollute-spring-boot-main-class/</link><pubDate>Tue, 16 Jun 2026 04:59:17 +0530</pubDate><guid>https://www.sivalabs.in/blog/dont-pollute-spring-boot-main-class/</guid><description>&lt;p&gt;Most Spring Boot applications start with a beautifully boring main class.&lt;/p&gt;
&lt;p&gt;Then one day we need caching. We add &lt;code&gt;@EnableCaching&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Then we need async processing. We add &lt;code&gt;@EnableAsync&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Then scheduling. Then JPA auditing. Then maybe something else.&lt;/p&gt;
&lt;p&gt;Before we know it, the main class has become the place where every framework feature goes to live.&lt;/p&gt;
&lt;p&gt;At first glance, this feels harmless. The application starts. The feature works. Everybody moves on.&lt;/p&gt;
&lt;p&gt;This works great&amp;hellip; until a slice test gets involved.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s look at why adding every &lt;code&gt;@EnableXXX&lt;/code&gt; annotation to the Spring Boot main class can make your tests more fragile, and what I prefer to do instead.&lt;/p&gt;</description></item><item><title>A Few Hard Learned Lessons On Structuring Spring Boot Applications</title><link>https://www.sivalabs.in/blog/a-few-hard-learned-lessons-on-structuring/</link><pubDate>Fri, 12 Jun 2026 04:59:17 +0530</pubDate><guid>https://www.sivalabs.in/blog/a-few-hard-learned-lessons-on-structuring/</guid><description>&lt;p&gt;One of the most common questions developers ask when starting a Spring Boot project is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How should I structure my code?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you spend enough time in Java circles, you&amp;rsquo;ll quickly run into recommendations like &lt;strong&gt;Clean Architecture, Hexagonal Architecture, Onion Architecture, Ports and Adapters&lt;/strong&gt;, and a dozen variations of the same idea.&lt;/p&gt;
&lt;p&gt;Now, before anyone gets upset: I think those architectures solve real problems.&lt;/p&gt;
&lt;p&gt;The issue is that many teams adopt them on day one, long before they actually have those problems.&lt;/p&gt;</description></item><item><title>Before You Judge, Get Curious</title><link>https://www.sivalabs.in/blog/before-you-judge-get-curious/</link><pubDate>Wed, 22 Apr 2026 04:59:17 +0530</pubDate><guid>https://www.sivalabs.in/blog/before-you-judge-get-curious/</guid><description>&lt;p&gt;A few years ago, I was working at a fintech company in Germany. Our business unit planned to build a new offering for customers in Germany and the UK.
Our team — product owner, business analyst, developers, and QA — gathered at a location and ran brainstorming sessions.
Since we were also using the product ourselves, we were essentially both the builders and the end users.&lt;/p&gt;</description></item><item><title>Feeling Left Behind in Tech? This Is Your 90-Day Comeback Plan</title><link>https://www.sivalabs.in/blog/feel-left-behind-in-tech-this-is-90-day-comeback-plan/</link><pubDate>Wed, 18 Mar 2026 04:59:17 +0530</pubDate><guid>https://www.sivalabs.in/blog/feel-left-behind-in-tech-this-is-90-day-comeback-plan/</guid><description>&lt;p&gt;You&amp;rsquo;ve been working for years. You know your systems inside out.
You&amp;rsquo;ve solved real problems, handled pressure, and delivered results.&lt;/p&gt;
&lt;p&gt;But now you open a job description… and it feels like you&amp;rsquo;re reading a different language.&lt;/p&gt;
&lt;p&gt;New frameworks. New tools. New expectations.&lt;/p&gt;
&lt;p&gt;And the thought creeps in: &lt;em&gt;&amp;ldquo;Have I fallen behind?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Stepping into Crazy AI World</title><link>https://www.sivalabs.in/blog/stepping-into-crazy-ai-world/</link><pubDate>Thu, 22 Jan 2026 04:59:17 +0530</pubDate><guid>https://www.sivalabs.in/blog/stepping-into-crazy-ai-world/</guid><description>&lt;p&gt;If you are feeling overwhelmed by the rapid pace of technological advancements, especially in the field of AI, know that you are not alone.
The AI landscape is evolving at an unbelievable speed, with new ideas and tools emerging every day.&lt;/p&gt;</description></item><item><title>The Power of Value Objects</title><link>https://www.sivalabs.in/blog/the-power-of-value-objects/</link><pubDate>Sun, 04 Jan 2026 04:59:17 +0530</pubDate><guid>https://www.sivalabs.in/blog/the-power-of-value-objects/</guid><description>&lt;p&gt;A &lt;strong&gt;Value Object&lt;/strong&gt; is a domain concept defined by its values rather than by identity.
For example, we can represent &lt;strong&gt;EventId&lt;/strong&gt;, &lt;strong&gt;EventCode&lt;/strong&gt; or &lt;strong&gt;Email&lt;/strong&gt; as a value object.
In this article, let&amp;rsquo;s explore the benefits of using value objects over primitive types.&lt;/p&gt;</description></item><item><title>Announcing FeatureTracker Application</title><link>https://www.sivalabs.in/blog/feature-tracker-application-announcement/</link><pubDate>Wed, 18 Jun 2025 04:59:17 +0530</pubDate><guid>https://www.sivalabs.in/blog/feature-tracker-application-announcement/</guid><description>&lt;p&gt;As a Java Developer Advocate at JetBrains, I frequently demonstrate IntelliJ IDEA features through videos and articles. To do this, I usually create small demo applications focused on specific features. While this works well initially, the number of such applications grows quickly. Soon, it becomes difficult to remember which app was built for what purpose, turning it into a maintenance headache.&lt;/p&gt;</description></item><item><title>Protect Your Mental Health While Being On Social Media</title><link>https://www.sivalabs.in/blog/protecting-your-mental-health-while-being-on-social-media/</link><pubDate>Sun, 08 Jun 2025 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/protecting-your-mental-health-while-being-on-social-media/</guid><description>&lt;p&gt;Social media is a double-edged sword. If used properly, it can be immensely helpful.
Personally, being on social media, especially on Twitter, helped me to connect with amazing people across the world.
This in turn gave me a lot of opportunities such as learning from the experts, job opportunities, a chance to write books, speaking at conferences, etc.&lt;/p&gt;</description></item><item><title>You Can Code Offline With Local AI(Ollama)</title><link>https://www.sivalabs.in/blog/code-offline-with-local-ai-ollama/</link><pubDate>Thu, 09 Jan 2025 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/code-offline-with-local-ai-ollama/</guid><description>&lt;p&gt;ChatGPT and other Generative AI tools took the world by a storm.
People are using these AI tools for various purposes such as to explore a topic,
to seek answers to their questions or to get help in coding, etc.
ChatGPT and Google&amp;rsquo;s Gemini are very popular AI tools that are available for free with some usage limitations.&lt;/p&gt;</description></item><item><title>Spring Boot + Testcontainers Tests at Jet Speed</title><link>https://www.sivalabs.in/blog/run-spring-boot-testcontainers-tests-at-jet-speed/</link><pubDate>Wed, 01 Jan 2025 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/run-spring-boot-testcontainers-tests-at-jet-speed/</guid><description>&lt;p&gt;Spring Boot 3.1.0 introduced &lt;a href="https://docs.spring.io/spring-boot/reference/testing/testcontainers.html"&gt;support for Testcontainers&lt;/a&gt;
to simplify local development and testing.
&lt;a href="https://testcontainers.com/"&gt;Testcontainers&lt;/a&gt; helps in writing tests using real dependencies instead of mocks, but it may also increase the test execution time.&lt;/p&gt;</description></item><item><title>My First Impression of Google's NotebookLM</title><link>https://www.sivalabs.in/blog/my-first-impression-of-notebooklm/</link><pubDate>Fri, 15 Nov 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/my-first-impression-of-notebooklm/</guid><description>&lt;p&gt;I came across &lt;a href="https://notebooklm.google/"&gt;NotebookLM&lt;/a&gt; from my social media feed, and it looks interesting.&lt;/p&gt;
&lt;p&gt;With NotebookLM, you can upload documents, videos, web URLs and let the AI agents talk about the uploaded material.
That sounds intriguing.&lt;/p&gt;
&lt;p&gt;Recently I wrote an article about software complexity and shared my viewpoint.
Many people appreciated it and some people didn&amp;rsquo;t. That is fine to have different opinions.&lt;/p&gt;</description></item><item><title>Running your own Spring Initializr and using it from IntelliJ IDEA</title><link>https://www.sivalabs.in/blog/running-custom-spring-initializr/</link><pubDate>Fri, 06 Sep 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/running-custom-spring-initializr/</guid><description>&lt;p&gt;If you ever worked with &lt;strong&gt;Spring Boot&lt;/strong&gt;, then you are probably aware of &lt;a href="https://start.spring.io/"&gt;Spring Initializr&lt;/a&gt;.
The Spring Initializr is a web application that you can use to create a Spring Boot application.&lt;/p&gt;
&lt;p&gt;Do you know Spring Initializr itself is an &lt;a href="https://github.com/spring-io/start.spring.io"&gt;open-source Spring Boot application&lt;/a&gt;?
You can fork it, customize it, deploy on your infrastructure and use it to generate Spring Boot applications.&lt;/p&gt;</description></item><item><title>Master the Art of Requesting Technical Help: A Handy Email Template</title><link>https://www.sivalabs.in/blog/an-email-template-of-asking-for-technical-help/</link><pubDate>Thu, 05 Sep 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/an-email-template-of-asking-for-technical-help/</guid><description>&lt;p&gt;As a software developer, at the beginning of my career, I thought it was more important to learn one more programming language or framework or library.
But as years passed by, I realized it is also equally important to learn how to interact with people.
Now remote work is becoming new normal and social media platforms like Twitter, LinkedIn, etc.
are a common place to interact with people across the globe.&lt;/p&gt;</description></item><item><title>About Me</title><link>https://www.sivalabs.in/about/</link><pubDate>Wed, 17 Jul 2024 13:06:31 +0000</pubDate><guid>https://www.sivalabs.in/about/</guid><description>&lt;h2 id="k-siva-prasad-reddy"&gt;K. Siva Prasad Reddy&lt;/h2&gt;
&lt;p&gt;I am a software engineer, architect, trainer, and technical content creator. I have been building software professionally since 2006, with most of my work centered around Java, Spring Boot, distributed systems, and backend engineering.&lt;/p&gt;
&lt;p&gt;I enjoy taking complex technical ideas and explaining them through practical examples. That is the main reason behind SivaLabs: sharing tutorials, opinions, and learning resources that help developers build better applications with confidence.&lt;/p&gt;</description></item><item><title>Mastering Spring Boot in 5 Stages</title><link>https://www.sivalabs.in/blog/mastering-spring-boot-in-5-stages/</link><pubDate>Fri, 05 Jul 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/mastering-spring-boot-in-5-stages/</guid><description>&lt;p&gt;&lt;a href="https://spring.io/"&gt;Spring Boot&lt;/a&gt; is the most popular framework in the Java world to build enterprise applications.
Also, Spring Boot is the most sought-after skill to get hired as a Java developer.&lt;/p&gt;
&lt;p&gt;Here is my recommended approach to learn Spring Boot.&lt;/p&gt;</description></item><item><title>Thymeleaf Layouts using Fragment Expressions in Spring Boot GraalVM Native Image</title><link>https://www.sivalabs.in/blog/thymeleaf-layouts-using-fragment-expressions/</link><pubDate>Sat, 08 Jun 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/thymeleaf-layouts-using-fragment-expressions/</guid><description>&lt;p&gt;Typically, in Spring Boot + Thymeleaf applications,
we use &lt;a href="https://github.com/ultraq/thymeleaf-layout-dialect"&gt;thymeleaf-layout-dialect&lt;/a&gt;
to define the common layout of the web pages and it works fine.&lt;/p&gt;
&lt;p&gt;But when we compile the Spring Boot application to GraalVM native image,
it is failing due to &lt;a href="https://github.com/ultraq/thymeleaf-layout-dialect/issues/235"&gt;this error&lt;/a&gt;.
I tried many suggestions mentioned in the above issue, but none of them worked for me.&lt;/p&gt;</description></item><item><title>Spring AI RAG using Embedding Models and Vector Databases</title><link>https://www.sivalabs.in/blog/spring-ai-rag-using-embedding-models-vector-databases/</link><pubDate>Thu, 14 Mar 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-ai-rag-using-embedding-models-vector-databases/</guid><description>&lt;p&gt;In this article, we will explore the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Introduction to Embedding Models.&lt;/li&gt;
&lt;li&gt;Loading data using DocumentReaders.&lt;/li&gt;
&lt;li&gt;Storing embeddings in VectorStores.&lt;/li&gt;
&lt;li&gt;Implementing RAG (Retrieval-Augmented Generation), a.k.a. Prompt Stuffing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s get started.&lt;/p&gt;</description></item><item><title>Getting Started with Spring AI and OpenAI</title><link>https://www.sivalabs.in/blog/getting-started-with-spring-ai-and-open-ai/</link><pubDate>Sat, 09 Mar 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/getting-started-with-spring-ai-and-open-ai/</guid><description>&lt;p&gt;In this article, we will explore the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Introduction to Spring AI.&lt;/li&gt;
&lt;li&gt;Interacting with OpenAI using Spring AI.&lt;/li&gt;
&lt;li&gt;Using &lt;strong&gt;PromptTemplates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Using &lt;strong&gt;OutputConverters&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s get started.&lt;/p&gt;</description></item><item><title>LangChain4j Retrieval-Augmented Generation (RAG) Tutorial</title><link>https://www.sivalabs.in/blog/langchain4j-retrieval-augmented-generation-tutorial/</link><pubDate>Sun, 25 Feb 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/langchain4j-retrieval-augmented-generation-tutorial/</guid><description>&lt;p&gt;In this article, we will explore the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand the need for &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Understand &lt;strong&gt;EmbeddingModel&lt;/strong&gt;, &lt;strong&gt;EmbeddingStore&lt;/strong&gt;, &lt;strong&gt;DocumentLoaders&lt;/strong&gt;, &lt;strong&gt;EmbeddingStoreIngestor&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Working with different EmbeddingModels and EmbeddingStores.&lt;/li&gt;
&lt;li&gt;Ingesting data into EmbeddingStore.&lt;/li&gt;
&lt;li&gt;Querying LLMs with data from EmbeddingStore.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s get started.&lt;/p&gt;</description></item><item><title>LangChain4j AiServices Tutorial</title><link>https://www.sivalabs.in/blog/langchain4j-ai-services-tutorial/</link><pubDate>Thu, 22 Feb 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/langchain4j-ai-services-tutorial/</guid><description>&lt;p&gt;In this article, we will explore the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using LangChain4j &lt;strong&gt;AiServices&lt;/strong&gt; to interact with LLMs.&lt;/li&gt;
&lt;li&gt;How to ask questions and map responses to different formats?&lt;/li&gt;
&lt;li&gt;Summarizing the given text in different formats.&lt;/li&gt;
&lt;li&gt;Analyzing the sentiment of the given text.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s get started.&lt;/p&gt;</description></item><item><title>Generative AI Conversations using LangChain4j ChatMemory</title><link>https://www.sivalabs.in/blog/generative-ai-conversations-using-langchain4j-chat-memory/</link><pubDate>Tue, 20 Feb 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/generative-ai-conversations-using-langchain4j-chat-memory/</guid><description>&lt;p&gt;In this article, we will explore the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to use LangChain4j &lt;strong&gt;ChatMemory&lt;/strong&gt; and &lt;strong&gt;ConversationalChain&lt;/strong&gt; to implement conversation style interaction?&lt;/li&gt;
&lt;li&gt;How to ask questions using &lt;strong&gt;PromptTemplate&lt;/strong&gt;?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the &lt;a href="https://www.sivalabs.in/blog/getting-started-with-generative-ai-using-java-langchain4j-openai-ollama/"&gt;previous article&lt;/a&gt;, we have seen how to interact with OpenAI using Java and LangChain4j.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s get started.&lt;/p&gt;</description></item><item><title>Getting Started with Generative AI using Java, LangChain4j, OpenAI and Ollama</title><link>https://www.sivalabs.in/blog/getting-started-with-generative-ai-using-java-langchain4j-openai-ollama/</link><pubDate>Sun, 18 Feb 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/getting-started-with-generative-ai-using-java-langchain4j-openai-ollama/</guid><description>&lt;p&gt;In this article, we will explore the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Brief introduction to Generative AI?&lt;/li&gt;
&lt;li&gt;How to interact with OpenAI APIs using Java?&lt;/li&gt;
&lt;li&gt;How to use LangChain4j to interact with OpenAI?&lt;/li&gt;
&lt;li&gt;How to run a LLM model locally using Ollama?&lt;/li&gt;
&lt;li&gt;Working with Ollama using LangChain4j and Testcontainers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s get started.&lt;/p&gt;</description></item><item><title>Should I use a framework or libraries?</title><link>https://www.sivalabs.in/blog/should-i-use-framework-or-libraries/</link><pubDate>Mon, 22 Jan 2024 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/should-i-use-framework-or-libraries/</guid><description>&lt;p&gt;In the software development world, trends come and go, and often we go through the same cycle again and again.
It seems 2024 is the year of &lt;strong&gt;&amp;ldquo;Framework vs Libraries&amp;rdquo;&lt;/strong&gt; debate. I mean this debate is not new, but it is getting louder again.&lt;/p&gt;</description></item><item><title>It's time to apply KISS principle to career</title><link>https://www.sivalabs.in/blog/time-to-apply-kiss-principle-to-career/</link><pubDate>Fri, 29 Dec 2023 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/time-to-apply-kiss-principle-to-career/</guid><description>&lt;p&gt;You might have heard from IT employees that there is no work-life balance in IT due to unrealistic deadlines, long working hours, etc.
I did work crazy hours in the first 7 or 8 years of my career, but not anymore.
Fortunately, I have been working in the companies that value work-life balance, and I never had to work beyond 8 hours in the recent past.&lt;/p&gt;</description></item><item><title>Go for Java/Spring Boot Developers</title><link>https://www.sivalabs.in/blog/go-for-java-springboot-developers/</link><pubDate>Fri, 24 Nov 2023 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/go-for-java-springboot-developers/</guid><description>&lt;p&gt;I have been using Java for more than 17 years, and I really like Java and its ecosystem.
Within the Java ecosystem, Spring Boot is my go-to framework for building applications.&lt;/p&gt;
&lt;p&gt;I used the Go language for an official project a couple of years ago, and initially I had mixed feelings about it.
But the more I use it, the more I like it.&lt;/p&gt;</description></item><item><title>My First Year at AtomicJar as a Developer Advocate</title><link>https://www.sivalabs.in/blog/my-first-year-at-atomicjar/</link><pubDate>Tue, 31 Oct 2023 23:29:17 +0000</pubDate><guid>https://www.sivalabs.in/blog/my-first-year-at-atomicjar/</guid><description>&lt;p&gt;I joined &lt;a href="https://www.atomicjar.com/"&gt;AtomicJar&lt;/a&gt; as a &lt;strong&gt;Developer Advocate&lt;/strong&gt; on 1st November 2022.
Time flies when you are enjoying your work, doesn&amp;rsquo;t it?&lt;/p&gt;
&lt;p&gt;Before joining AtomicJar, I worked as a TechLead/Architect at various companies for more than 15 years.
When I got the opportunity to join AtomicJar, I was very excited to work with my favourite technology &lt;a href="https://www.testcontainers.org/"&gt;Testcontainers&lt;/a&gt;.
I have been using Testcontainers for more than 4 years, and I am a big fan of it.&lt;/p&gt;</description></item><item><title>Spring Boot + jOOQ Tutorial - 5 : Fetching Many-to-Many Relationships</title><link>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-fetching-many-to-many-associations/</link><pubDate>Thu, 26 Oct 2023 00:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-fetching-many-to-many-associations/</guid><description>&lt;p&gt;In the &lt;a href="https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-fetching-one-to-many-associations/"&gt;previous tutorial&lt;/a&gt;,
we have learned how to fetch &lt;strong&gt;One-to-Many&lt;/strong&gt; relationships using jOOQ.
In this tutorial, we will learn how to fetch &lt;strong&gt;Many-to-Many&lt;/strong&gt; relationships using jOOQ.&lt;/p&gt;</description></item><item><title>Spring Boot + jOOQ Tutorial - 4 : Fetching One-to-Many Relationships</title><link>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-fetching-one-to-many-associations/</link><pubDate>Mon, 23 Oct 2023 00:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-fetching-one-to-many-associations/</guid><description>&lt;p&gt;In the &lt;a href="https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-fetching-one-to-one-associations/"&gt;previous tutorial&lt;/a&gt;,
we have learned how to fetch &lt;strong&gt;One-to-One&lt;/strong&gt; relationships using jOOQ.
In this tutorial, we will learn how to fetch &lt;strong&gt;One-to-Many&lt;/strong&gt; relationships using jOOQ.&lt;/p&gt;</description></item><item><title>Spring Boot + jOOQ Tutorial - 3 : Fetching One-to-One Relationships</title><link>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-fetching-one-to-one-associations/</link><pubDate>Thu, 19 Oct 2023 00:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-fetching-one-to-one-associations/</guid><description>&lt;p&gt;In the &lt;a href="https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-crud-operations/"&gt;previous tutorial&lt;/a&gt;,
we have learned how to implement basic CRUD Operations using jOOQ.
In this tutorial, we will learn how to fetch &lt;strong&gt;One-to-One&lt;/strong&gt; relationships using jOOQ.&lt;/p&gt;</description></item><item><title>Spring Boot + jOOQ Tutorial - 2 : Implementing CRUD Operations</title><link>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-crud-operations/</link><pubDate>Mon, 16 Oct 2023 00:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-crud-operations/</guid><description>&lt;p&gt;In the &lt;a href="https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-getting-started/"&gt;previous tutorial&lt;/a&gt;, we have seen how to generate jOOQ code using
the &lt;a href="https://github.com/testcontainers/testcontainers-jooq-codegen-maven-plugin"&gt;testcontainers-jooq-codegen-maven-plugin&lt;/a&gt;
and use jOOQ Typesafe DSL to execute SQL queries.
In this tutorial, we will learn how to implement basic CRUD Operations using jOOQ.&lt;/p&gt;</description></item><item><title>Contact Me</title><link>https://www.sivalabs.in/blog/contact-me/</link><pubDate>Sun, 15 Oct 2023 06:06:31 +0000</pubDate><guid>https://www.sivalabs.in/blog/contact-me/</guid><description>&lt;p&gt;You can reach out to us using any of the following channels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Twitter&lt;/strong&gt;: &lt;a href="https://twitter.com/sivalabs"&gt;@sivalabs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;: &lt;a href="https://www.linkedin.com/in/ksivaprasadreddy/"&gt;K Siva Prasad Reddy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Spring Boot + jOOQ Tutorial - 1 : Getting Started</title><link>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-getting-started/</link><pubDate>Thu, 12 Oct 2023 00:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-boot-jooq-tutorial-getting-started/</guid><description>&lt;p&gt;&lt;a href="https://www.jooq.org/"&gt;jOOQ&lt;/a&gt; is a Java persistence library that provides SQL DSL for writing typesafe SQL queries.
It supports most of the popular databases like &lt;strong&gt;MySQL&lt;/strong&gt;, &lt;strong&gt;PostgreSQL&lt;/strong&gt;, &lt;strong&gt;Oracle&lt;/strong&gt;, &lt;strong&gt;SQL Server&lt;/strong&gt;, and many more.
In this tutorial, we will learn how to get started with jOOQ for implementing persistence layer in a Spring Boot application.
You can also use jOOQ in other JVM based languages like &lt;strong&gt;Kotlin&lt;/strong&gt;, &lt;strong&gt;Scala&lt;/strong&gt;, etc.&lt;/p&gt;</description></item><item><title>Spring Security OAuth 2 Tutorial - 10 : Service to Service Communication using Client Credentials Flow</title><link>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-service-to-service-communication-using-client-credentials-flow/</link><pubDate>Mon, 09 Oct 2023 00:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-service-to-service-communication-using-client-credentials-flow/</guid><description>&lt;p&gt;In this article, we will learn how to implement &lt;strong&gt;Service to Service Communication&lt;/strong&gt; using &lt;strong&gt;Client Credentials Flow&lt;/strong&gt;.
We will create the &lt;strong&gt;archival-service&lt;/strong&gt; in which we will use a scheduler job to invoke the &lt;strong&gt;messages-service&lt;/strong&gt; APIs to archive the messages.
For implementing this, we will use &lt;strong&gt;Client Credentials Flow&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Spring Security OAuth 2 Tutorial - 9 : Invoking Secured Resource Server APIs from Client Application</title><link>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-integrating-client-and-resource-server/</link><pubDate>Fri, 06 Oct 2023 00:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-integrating-client-and-resource-server/</guid><description>&lt;p&gt;In the previous articles, we have created &lt;strong&gt;messages-webapp&lt;/strong&gt; and &lt;strong&gt;messages-service&lt;/strong&gt; and invoked API endpoints using Postman.
In this article, we will learn how to invoke the secured &lt;strong&gt;messages-service&lt;/strong&gt; API endpoints from the Client application &lt;strong&gt;messages-webapp&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Spring Security OAuth 2 Tutorial - 8 : Securing Resource Server</title><link>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-securing-resource-server/</link><pubDate>Mon, 02 Oct 2023 00:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-securing-resource-server/</guid><description>&lt;p&gt;In the previous article, we have created &lt;strong&gt;messages-webapp&lt;/strong&gt; and secured it with &lt;strong&gt;Spring Security OAuth 2.0&lt;/strong&gt; using Authorization Code Flow.
In this article, we will create &lt;strong&gt;messages-service&lt;/strong&gt;, which is a Spring Boot Resource Server, and secure it with Spring Security OAuth 2.0.&lt;/p&gt;</description></item><item><title>Spring Security OAuth 2 Tutorial - 7 : Securing Spring MVC Client Application</title><link>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-securing-springmvc-client-application/</link><pubDate>Thu, 28 Sep 2023 03:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-securing-springmvc-client-application/</guid><description>&lt;p&gt;In this article, we will create &lt;strong&gt;messages-webapp&lt;/strong&gt; which is a &lt;strong&gt;Spring MVC + Thymeleaf&lt;/strong&gt; web application
and secure it with &lt;strong&gt;Spring Security OAuth 2.0&lt;/strong&gt; using &lt;strong&gt;Keycloak&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Spring Security OAuth 2 Tutorial - 6 : Microservices Sample Project Setup</title><link>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-microservices-project-setup/</link><pubDate>Thu, 28 Sep 2023 00:30:00 +0000</pubDate><guid>https://www.sivalabs.in/blog/spring-security-oauth2-tutorial-microservices-project-setup/</guid><description>&lt;p&gt;In the previous articles, we have learned about various OAuth 2.0 / OpenID Connect flows using web browser, cURL and Postman.
Now it&amp;rsquo;s time to put what we have learned into practice. What better way to do that than to build a sample project?&lt;/p&gt;</description></item></channel></rss>