<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Spring-Boot on Yonatan Karp-Rudin</title><link>https://yonatankarp.github.io/tags/spring-boot/</link><description>Recent content in Spring-Boot on Yonatan Karp-Rudin</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 05 Jun 2024 00:00:00 +0100</lastBuildDate><atom:link href="https://yonatankarp.github.io/tags/spring-boot/index.xml" rel="self" type="application/rss+xml"/><item><title>How to Fix Misconfigurations in RedisTemplate</title><link>https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/</link><pubDate>Wed, 05 Jun 2024 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/</guid><description>&lt;p&gt;Table of Contents&lt;/p&gt;
&lt;p&gt;&lt;a href=""&gt;Toggle
&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Initial_Configuration"&gt;Initial Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Creating_the_RedisTemplate_Bean"&gt;Creating the RedisTemplate Bean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Writing_Tests"&gt;Writing Tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Identifying_The_Issue"&gt;Identifying The Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Fixing_the_Issue"&gt;Fixing the Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Where_to_Find_the_Code"&gt;Where to Find the Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Credits"&gt;Credits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Our story begins with a colleague and me trying to debug an issue with our project for a few hours. We needed to fetch a value from Redis storage, but whenever the service ran, the fetched value was &lt;code&gt;null&lt;/code&gt;. Despite our efforts, we couldn&amp;rsquo;t find a solution on the internet, and to make matters worse, our code was actually covered by tests that had all passed!&lt;/p&gt;</description></item><item><title>Observability in Action: How to Use OpenTelemetry</title><link>https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/</link><pubDate>Tue, 17 Oct 2023 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/</guid><description>&lt;p&gt;Table of Contents&lt;/p&gt;
&lt;p&gt;&lt;a href=""&gt;Toggle
&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Introduction"&gt;Introduction&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Introduction_to_Service_Instrumentation"&gt;Introduction to Service Instrumentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Part_1_%e2%80%93_Building_the_Client_Library"&gt;Part 1 – Building the Client Library&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Adding_Dependencies"&gt;Adding Dependencies&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Domain_Modeling"&gt;Domain Modeling&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Constructing_the_HTTP_Client"&gt;Constructing the HTTP Client&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Connecting_everything_together"&gt;Connecting everything together&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Part_2_%e2%80%93_Building_the_Service"&gt;Part 2 – Building the Service&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Adding_Dependencies-2"&gt;Adding Dependencies&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Loading_the_Facts"&gt;Loading the Facts&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Storing_and_Reading_Facts"&gt;Storing and Reading Facts&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Dockerizing_the_Project"&gt;Dockerizing the Project&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Setting_up_docker-compose"&gt;Setting up docker-compose&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Running_the_Service"&gt;Running the Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Part_3_%e2%80%93_Setting_Up_Instrumentation_with_OpenTelemetry"&gt;Part 3 – Setting Up Instrumentation with OpenTelemetry&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#HoneyCombio"&gt;HoneyComb.io&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Introduction-2"&gt;Introduction&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Setting_up"&gt;Setting up&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Setting_Up_OpenTelemetry"&gt;Setting Up OpenTelemetry&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Prerequisites"&gt;Prerequisites&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Integrating_the_OpenTelemetry_SDK_and_Agent"&gt;Integrating the OpenTelemetry SDK and Agent&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Dependency_Integration"&gt;Dependency Integration&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Constructing_the_Gradle_Task_for_the_OpenTelemetry_Agent"&gt;Constructing the Gradle Task for the OpenTelemetry Agent&lt;/a&gt;&lt;/p&gt;</description></item><item><title>How To Build Your Domain Gateway With OpenApi</title><link>https://yonatankarp.github.io/blog/build-domain-gateway-openapi/</link><pubDate>Wed, 14 Dec 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/build-domain-gateway-openapi/</guid><description>&lt;div class="editors-note"&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; This article explains what a domain gateway is, how to build one, and why you would want it.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Table of Contents&lt;/p&gt;
&lt;p&gt;&lt;a href=""&gt;Toggle
&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#What_is_a_Domain_Gateway"&gt;What is a Domain Gateway?&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Dos"&gt;Domain Gateway Do&amp;rsquo;s&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Donts"&gt;Domain Gateway Don&amp;rsquo;ts&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Ok_Im_Convinced%e2%80%a6"&gt;Ok, I&amp;rsquo;m Convinced…&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#How_Do_I_Build_a_Domain_Gateway"&gt;How Do I Build a Domain Gateway?&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Tech_Stack"&gt;Tech Stack&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Structure"&gt;Domain Gateway Structure&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#API_Specs"&gt;API Specs&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Hello_Service"&gt;Hello Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Goodbye_Service"&gt;Goodbye Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Service"&gt;Domain Gateway Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Generating_Multiple_Specs"&gt;Generating Multiple Specs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Add_Generated_Code_To_Project"&gt;Add Generated Code To Project&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Using_The_Generated_Code"&gt;Using The Generated Code&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Clients_Definition"&gt;Clients Definition&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Definition"&gt;Domain Gateway Definition&lt;/a&gt;&lt;/p&gt;</description></item><item><title>How to Use OpenApi to Build a Robust RESTful API</title><link>https://yonatankarp.github.io/blog/openapi-robust-restful-api/</link><pubDate>Sun, 04 Dec 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/openapi-robust-restful-api/</guid><description>&lt;div class="editors-note"&gt;
&lt;p&gt;&lt;strong&gt;Editor&amp;rsquo;s Note:&lt;/strong&gt; This post was originally written by me and published on SumUp&amp;rsquo;s blog. However, a lot has changed since then. I am no longer working for SumUp, OpenAPI has released two major versions, Spring Boot has had a major release, and even Gradle has had multiple major releases. Not only that, but my writing skills have improved dramatically since then, and over time, I have found some small mistakes in the original article. Since the original article is one of my most successful, I decided to rewrite it and publish an updated version.&lt;/p&gt;</description></item><item><title>Create a Custom Spring Boot App Banner</title><link>https://yonatankarp.github.io/blog/custom-spring-boot-banner/</link><pubDate>Fri, 02 Dec 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/custom-spring-boot-banner/</guid><description>&lt;p&gt;Today, I&amp;rsquo;d like to share a fun feature of Spring with you. It&amp;rsquo;s not new or crucial, but it&amp;rsquo;s definitely enjoyable!&lt;/p&gt;
&lt;p&gt;Normally, when you launch your Spring Boot app, you see a standard banner in the logs like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://yonatankarp.github.io/images/blog/medium-1*qhCPGhoCfVHDiV_8C2w-IQ.png" alt="Spring Boot Banner"&gt;&lt;/p&gt;
&lt;p&gt;But have you ever thought about replacing that Spring banner with your own custom banner? If you have, then this article is for you!&lt;/p&gt;
&lt;p&gt;To begin, let&amp;rsquo;s visit &lt;a href="https://patorjk.com/"&gt;https://patorjk.com/&lt;/a&gt;, a website that helps us create custom text. You can enter the desired text for your log and choose from a variety of fonts. For example:&lt;/p&gt;</description></item><item><title>How to inject multiple implementations in the Spring Framework</title><link>https://yonatankarp.github.io/blog/inject-multiple-implementations-spring/</link><pubDate>Fri, 11 Feb 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/inject-multiple-implementations-spring/</guid><description>&lt;p&gt;Recently, I had a discussion with one of my colleagues during a code review. We talked about a hidden gem in Spring (as well as other frameworks like Micronaut) that could simplify our code.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s consider a task: developing a good morning greeting system that supports both English and Hebrew languages. The system should greet us in each of these languages.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll begin with the native implementation by introducing our greeters:&lt;/p&gt;</description></item></channel></rss>