<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shivam Yadav</title>
    <description>The latest articles on DEV Community by Shivam Yadav (@quotcode).</description>
    <link>https://dev.to/quotcode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F323882%2F8ab969dd-eebe-482e-839b-edb4076312b7.jpg</url>
      <title>DEV Community: Shivam Yadav</title>
      <link>https://dev.to/quotcode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quotcode"/>
    <language>en</language>
    <item>
      <title>OAuth2 Spring Boot GitHub Authentication</title>
      <dc:creator>Shivam Yadav</dc:creator>
      <pubDate>Sat, 18 Jan 2025 18:04:44 +0000</pubDate>
      <link>https://dev.to/quotcode/oauth2-spring-boot-github-authentication-4f1p</link>
      <guid>https://dev.to/quotcode/oauth2-spring-boot-github-authentication-4f1p</guid>
      <description>&lt;p&gt;We are going to create a user login functionality using the OAuth2 dependency of Spring. I am using Java SE21 and Spring Boot 3.4.1 version.&lt;/p&gt;

&lt;p&gt;I have referred the &lt;a href="https://youtu.be/us0VjFiHogo?si=1ztOf3UJq1MNODbP" rel="noopener noreferrer"&gt;Dan Vega's Youtube&lt;/a&gt; video for this demonstration. &lt;/p&gt;

&lt;p&gt;Let's start...&lt;/p&gt;

&lt;p&gt;Step 1: We need two dependencies for this project in our pom.xml: Spring Web and OAuth2 Client&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-oauth2-client&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2: Let's create a RestController for the public and secured endpoints as shown below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package com.sky.cob_service.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class COBController {

    @GetMapping("/")
    public String cobHome() {
        return "Welcome to COB Public Home Page";
    }
    @GetMapping("/COBPrivateHome")
    public String cobPrivateHome() {
        return "Welcome to COB Private Home Page";
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One thing to note here is that we get Spring Security on classpath in this application as we have included the OAuth2 client dependency. Hence, when we start the application we get the below plain login screen by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnu7id8kbit2zezh44v6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnu7id8kbit2zezh44v6.png" alt="Spring Security Default Login Screen" width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: To override the default username and password of Spring Security we need to create a custom Spring Security Configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ackage com.sky.cob_service.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class COBSecurityConfig {

    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
                .authorizeHttpRequests(auth -&amp;gt; {
                    auth.requestMatchers("/").permitAll();
                    auth.anyRequest().authenticated();
                })
                .oauth2Login(Customizer.withDefaults())
                .formLogin(Customizer.withDefaults())
                .build();
        }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rx5ysiiquedj4n4m9i2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rx5ysiiquedj4n4m9i2.png" alt="Spring Security Configuration Code" width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 4: In order to configure the GitHub OAuth Login in our application, we will first create a secret by logging into GitHub Account and navigate to below path.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu4xjsuwmhph45ua0yab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu4xjsuwmhph45ua0yab.png" alt="GitHub OAuth Settings Path" width="800" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a secret and fill in the details for homepage url and callback url as below.&lt;/p&gt;

&lt;p&gt;Note: Callback URL is the one that needs to be used as it is. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd9iwds3m9ii8vabqtbb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd9iwds3m9ii8vabqtbb.png" alt="Callback URL Settings" width="751" height="693"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 5: Last step is to provide the client-id and client-secret created in Step 4 for GitHub OAuth in our application.properties file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server.port=8763

logging.level.org.springframework.security=TRACE

#github login
spring.security.oauth2.client.registration.github.client-id=
spring.security.oauth2.client.registration.github.client-secret=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, to test everything is working fine. Just hit the localhost:8763 URL and see you will get your public home page by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9v7y3xcvx239psovj7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9v7y3xcvx239psovj7d.png" alt="Public Home Page" width="800" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, try hitting the secured private endpoint mentioned in the RestController.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8763/COBPrivateHome" rel="noopener noreferrer"&gt;http://localhost:8763/COBPrivateHome&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will redirect you to the login page showing both password based and GitHub OAuth based Login methods. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9q0dzw6ds7lb3y3qmf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9q0dzw6ds7lb3y3qmf9.png" alt="Login Page" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go ahead with the GitHub login and you will see the private home page content displayed once you are logged in via your GitHub Account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4mwe3inbqifz83ugrw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4mwe3inbqifz83ugrw5.png" alt="Login Page of GitHub" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvw2zudsjlyr2rnxw5ysx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvw2zudsjlyr2rnxw5ysx.png" alt="Login Succes" width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading till the end. See you in the next one!&lt;/p&gt;

</description>
      <category>oauth</category>
      <category>github</category>
      <category>springboot</category>
      <category>springsecurity</category>
    </item>
    <item>
      <title>Microservices Part 01: Creating Service Registry Application</title>
      <dc:creator>Shivam Yadav</dc:creator>
      <pubDate>Thu, 16 Jan 2025 19:05:32 +0000</pubDate>
      <link>https://dev.to/quotcode/microservices-part-01-creating-service-registry-application-4mhm</link>
      <guid>https://dev.to/quotcode/microservices-part-01-creating-service-registry-application-4mhm</guid>
      <description>&lt;p&gt;In order to create a Microservices Application we will first require a Service Registry which is nothing but a special kind of microservice that will have a list of microservices registered inside it.&lt;/p&gt;

&lt;p&gt;There are total three steps to create a Service Registry.&lt;/p&gt;

&lt;p&gt;Step1: We are going to write our Service Registry microservice application using the &lt;strong&gt;spring-cloud-starter-netflix-eureka-server&lt;/strong&gt; dependency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"&amp;gt;
    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
    &amp;lt;parent&amp;gt;
        &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;spring-boot-starter-parent&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;3.4.1&amp;lt;/version&amp;gt;
        &amp;lt;relativePath/&amp;gt; &amp;lt;!-- lookup parent from repository --&amp;gt;
    &amp;lt;/parent&amp;gt;
    &amp;lt;groupId&amp;gt;com.sky&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;service-registry&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;
    &amp;lt;name&amp;gt;service-registry&amp;lt;/name&amp;gt;
    &amp;lt;description&amp;gt;Registry for Job Portal Application&amp;lt;/description&amp;gt;
    &amp;lt;url/&amp;gt;
    &amp;lt;licenses&amp;gt;
        &amp;lt;license/&amp;gt;
    &amp;lt;/licenses&amp;gt;
    &amp;lt;developers&amp;gt;
        &amp;lt;developer/&amp;gt;
    &amp;lt;/developers&amp;gt;
    &amp;lt;scm&amp;gt;
        &amp;lt;connection/&amp;gt;
        &amp;lt;developerConnection/&amp;gt;
        &amp;lt;tag/&amp;gt;
        &amp;lt;url/&amp;gt;
    &amp;lt;/scm&amp;gt;
    &amp;lt;properties&amp;gt;
        &amp;lt;java.version&amp;gt;21&amp;lt;/java.version&amp;gt;
        &amp;lt;spring-cloud.version&amp;gt;2024.0.0&amp;lt;/spring-cloud.version&amp;gt;
    &amp;lt;/properties&amp;gt;
    &amp;lt;dependencies&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.cloud&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-cloud-starter-netflix-eureka-server&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-test&amp;lt;/artifactId&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
    &amp;lt;/dependencies&amp;gt;
    &amp;lt;dependencyManagement&amp;gt;
        &amp;lt;dependencies&amp;gt;
            &amp;lt;dependency&amp;gt;
                &amp;lt;groupId&amp;gt;org.springframework.cloud&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;spring-cloud-dependencies&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;${spring-cloud.version}&amp;lt;/version&amp;gt;
                &amp;lt;type&amp;gt;pom&amp;lt;/type&amp;gt;
                &amp;lt;scope&amp;gt;import&amp;lt;/scope&amp;gt;
            &amp;lt;/dependency&amp;gt;
        &amp;lt;/dependencies&amp;gt;
    &amp;lt;/dependencyManagement&amp;gt;

    &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;spring-boot-maven-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;/plugin&amp;gt;
        &amp;lt;/plugins&amp;gt;
    &amp;lt;/build&amp;gt;

&amp;lt;/project&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  service-registry/pom.xml
&lt;/h6&gt;

&lt;p&gt;Step 2: Now, we need to also include the annotation &lt;strong&gt;@EnableEurekaServer&lt;/strong&gt; to notify that this particular application will  act as a Registry Server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package com.sky.service_registry;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class ServiceRegistryApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceRegistryApplication.class, args);
    }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  service_registry/ServiceRegistryApplication.java
&lt;/h6&gt;

&lt;p&gt;Step 3: We need to also specify the below details. To tell Spring to not register this application as a microservice. As all the other microservices will be registered inside this special microservice.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spring.application.name=service-registry
server.port=8761

eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  /service-registry/src/main/resources/application.properties
&lt;/h6&gt;

&lt;p&gt;Step 4: We will create a new microservice and try to register it in the Service Registry that was created in the previous steps.&lt;/p&gt;

&lt;p&gt;We need to add the &lt;strong&gt;spring-cloud-starter-netflix-eureka-client&lt;/strong&gt; dependency in our pom.xml of the new microservice in order to make it available/discoverable for registeration in the Service Registry.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    &amp;lt;dependencies&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.cloud&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-cloud-starter-netflix-eureka-client&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-test&amp;lt;/artifactId&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
    &amp;lt;/dependencies&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 5: Also, we have to add below configuration for newly created microservice to specify the url for eureka server i.e. our Service Registry.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spring.application.name=job-search-service
server.port=8762

eureka.client.service-url.defaultZone=http://localhost:8761/eureka
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 6: Now, make sure the Service Registry and the newly created microservice is running. To validate if the registration is success we can go to the Eureka Server URL(&lt;a href="http://localhost:8761/" rel="noopener noreferrer"&gt;http://localhost:8761/&lt;/a&gt;) and locate the new microservice name there as shown in below snapshot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes0m21p26pnqrrpioc5k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes0m21p26pnqrrpioc5k.png" alt="Eureka Server Snapshot" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stay tuned for the next part of the Microservices Blog. &lt;br&gt;
Thanks for reading! &lt;/p&gt;

</description>
      <category>java</category>
      <category>microservices</category>
      <category>eurekaserver</category>
      <category>serviceregistry</category>
    </item>
  </channel>
</rss>
