<?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: FaN000s</title>
    <description>The latest articles on DEV Community by FaN000s (@devfanooos).</description>
    <link>https://dev.to/devfanooos</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%2F121273%2F89a2c570-915b-4b42-99fb-60ff81954a42.jpg</url>
      <title>DEV Community: FaN000s</title>
      <link>https://dev.to/devfanooos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devfanooos"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>FaN000s</dc:creator>
      <pubDate>Wed, 22 Apr 2026 08:32:53 +0000</pubDate>
      <link>https://dev.to/devfanooos/-2a2l</link>
      <guid>https://dev.to/devfanooos/-2a2l</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/mohamadawwaad/building-a-local-zero-cost-ai-pull-request-reviewer-with-langgraph-and-ollama-518m" class="crayons-story__hidden-navigation-link"&gt;Building a Local, Zero-Cost AI Pull Request Reviewer with LangGraph and Ollama&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/mohamadawwaad" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F520580%2F085e947b-e32e-4a46-94c3-24d33596fbfd.png" alt="mohamadawwaad profile" class="crayons-avatar__image" width="420" height="420"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/mohamadawwaad" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Mohammad Awwaad
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Mohammad Awwaad
                
              
              &lt;div id="story-author-preview-content-3532955" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/mohamadawwaad" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F520580%2F085e947b-e32e-4a46-94c3-24d33596fbfd.png" class="crayons-avatar__image" alt="" width="420" height="420"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Mohammad Awwaad&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/mohamadawwaad/building-a-local-zero-cost-ai-pull-request-reviewer-with-langgraph-and-ollama-518m" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 21&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/mohamadawwaad/building-a-local-zero-cost-ai-pull-request-reviewer-with-langgraph-and-ollama-518m" id="article-link-3532955"&gt;
          Building a Local, Zero-Cost AI Pull Request Reviewer with LangGraph and Ollama
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/architecture"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;architecture&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/mohamadawwaad/building-a-local-zero-cost-ai-pull-request-reviewer-with-langgraph-and-ollama-518m" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/mohamadawwaad/building-a-local-zero-cost-ai-pull-request-reviewer-with-langgraph-and-ollama-518m#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>FaN000s</dc:creator>
      <pubDate>Sun, 08 Mar 2026 19:33:41 +0000</pubDate>
      <link>https://dev.to/devfanooos/-2821</link>
      <guid>https://dev.to/devfanooos/-2821</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/mohamadawwaad" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F520580%2F085e947b-e32e-4a46-94c3-24d33596fbfd.png" alt="mohamadawwaad"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/mohamadawwaad/the-zero-cost-cloud-engineer-the-300-dilemma-and-provisioning-the-free-vm-1llm" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The Zero-Cost Cloud Engineer: The $300 Dilemma and Provisioning the Free VM&lt;/h2&gt;
      &lt;h3&gt;Mohammad Awwaad ・ Mar 8&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#gcp&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#architecture&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#springboot&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>gcp</category>
      <category>devops</category>
      <category>architecture</category>
      <category>springboot</category>
    </item>
    <item>
      <title>When was the last time you have implemented one of the design patterns? what was the problem you were trying to solve?</title>
      <dc:creator>FaN000s</dc:creator>
      <pubDate>Sat, 15 May 2021 07:55:05 +0000</pubDate>
      <link>https://dev.to/devfanooos/when-was-the-last-time-you-have-implemented-one-of-the-design-patterns-what-was-the-problem-you-were-trying-to-solve-gl8</link>
      <guid>https://dev.to/devfanooos/when-was-the-last-time-you-have-implemented-one-of-the-design-patterns-what-was-the-problem-you-were-trying-to-solve-gl8</guid>
      <description>&lt;p&gt;There are a lot of resources out there explain the different kinds of design pattern. Most (if not all) these resources are based on imaginary scenarios for simplification. &lt;/p&gt;

&lt;p&gt;So, what about sharing the last time you have implemented one of the design patterns in a real world project? &lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Introduction to Spring Cloud Config </title>
      <dc:creator>FaN000s</dc:creator>
      <pubDate>Sat, 14 Nov 2020 20:48:08 +0000</pubDate>
      <link>https://dev.to/devfanooos/introduction-to-spring-cloud-config-52ac</link>
      <guid>https://dev.to/devfanooos/introduction-to-spring-cloud-config-52ac</guid>
      <description>&lt;p&gt;In my &lt;a href="https://dev.to/devfanooos/managing-configurations-in-microservices-1l1o"&gt;previous article&lt;/a&gt; I have mentioned four products/applications for managing configuration in microservices architecture. In this article we will explain the first option (Spring Cloud Config)&lt;/p&gt;

&lt;h2&gt;
  
  
  What is spring cloud config
&lt;/h2&gt;

&lt;p&gt;Spring cloud config is part of spring cloud tool set for developing cloud native application and microservices. It provides server and client support for externalize configurations in a distributed systems. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F51asjbdxbw5qv5dt42qp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F51asjbdxbw5qv5dt42qp.png" alt="Spring cloud server"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In much simpler words, spring cloud config is a normal spring project that reads configurations from a centralized configuration repository and provides these configuration to other application (microservices). &lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up the config server.
&lt;/h2&gt;

&lt;p&gt;Getting spring cloud config server is easy as much as creating any other spring project. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://start.spring.io/" rel="noopener noreferrer"&gt;start.spring.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Set the project name (Artifact) to config-server and in the dependencies section add config server.&lt;/li&gt;
&lt;li&gt;Download the zipped file (config-server.zip).&lt;/li&gt;
&lt;li&gt;Extract the project &lt;code&gt;$ unzip config-server.zip&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;ConfigServerApplication&lt;/strong&gt; class add &lt;strong&gt;@EnableConfigServer&lt;/strong&gt; annotation.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

package com.example.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

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


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

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Execute the following commands to create a local git repository. This git repository will be used by the spring config server as the source of configuration for the other service.
```
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;$mkdir config-repo&lt;br&gt;
$cd config-repo&lt;br&gt;
$echo "foo.property=property_dev_value" &amp;gt; my-service-dev.properties&lt;br&gt;
$echo "foo.property=property_sit_value" &amp;gt; my-service-sit.properties&lt;br&gt;
$echo "foo.property=property_prod_value" &amp;gt; my-service-prod.properties&lt;br&gt;
$git init&lt;br&gt;
$git add .&lt;br&gt;
$git commit -m"Adding configurations"&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* Add the following properties to the `application.properties` file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;spring.cloud.config.server.git.uri=file://${user.home}/config-repo&lt;br&gt;
spring.cloud.config.server.git.clone-on-start=true&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* Build the project `$ cd config-server &amp;amp;&amp;amp; mvn clean package`.
* Run the project `$ java -jar target/config-server.VERSION.jar`.

Now you have a full featured configuration server up and running. 


## Creating a spring boot client application.
Now we need to create another application that will act as a microservices that needs to load its configuration from our configuration server. 
Obviously we will use spring boot and the other part of spring cloud config project (the client library).
&amp;lt;br/&amp;gt;
There are two points we need to mention here before getting into the steps of creating the client. 
1. As the configuration of any project usually needs to be loaded at the startup process, we need to change the behavior of application bootstraping. This happens just by adding a new file `bootstrap.properties` to the resources directory.  
2. The link between the client application and the config server is the application name. In our case `my-service`. 

&amp;lt;br/&amp;gt;
Here are the steps needed to create a client application.
* As usual, go to [start.spring.io](https://start.spring.io/)
* set the project name (Artifact) to my-service.
* add `config client` to the dependencies.
* Change `MyserviceApplication.java` class to be as following
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;package com.example.myservice;&lt;/p&gt;

&lt;p&gt;import org.springframework.boot.SpringApplication;&lt;br&gt;
import org.springframework.boot.autoconfigure.SpringBootApplication;&lt;br&gt;
import org.springframework.cloud.context.config.annotation.RefreshScope;&lt;/p&gt;

&lt;p&gt;@SpringBootApplication&lt;br&gt;
@RefreshScope&lt;br&gt;
public class MyserviceApplication {&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
    SpringApplication.run(MyserviceApplication.class, args);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* Add `bootstrap.properties` file to the resource directory and write the following configuration into it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;server.port=8081&lt;br&gt;
spring.application.name=my-service&lt;br&gt;
spring.cloud.config.uri=&lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The `spring.cloud.config.uri` property is pointing to the URL of the config server.
* For testing, we will create a REST controller `ConfigController`, inject a value from the properties files in the configuration server (`foo.property`), then display the value. For that purpose, create the following class. 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;package com.example.myservice;&lt;/p&gt;

&lt;p&gt;import org.springframework.beans.factory.annotation.Value;&lt;br&gt;
import org.springframework.web.bind.annotation.GetMapping;&lt;br&gt;
import org.springframework.web.bind.annotation.RestController;&lt;/p&gt;

&lt;p&gt;@RestController&lt;br&gt;
public class ConfigController{&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Value("${foo.property: nothing}")
private String configProperty;


@GetMapping("/getConfigs")
public String getConfigProperty(){
    return this.configProperty;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* Package the client application `$mvn clean package`
* Run the client application `$java -jar target/myservice.VERSION.jar`.
&amp;lt;BR/&amp;gt;
Now if you open this URL (http://localhost:8081/getConfigs) in the browser, you should see the value of the `foo.property` displayed. 
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xp63h0m3czon8m4sc19o.png)
* If you want to get the configuration of another profile, you have to set the `spring.profiles.active` property in the `bootstrap.properties` file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;spring.profiles.active=prod&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Now if you package and rerun the application, you will get the value of the same property from the `prod` profile.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/qeww2q7ws04axxz3ackm.png)
&amp;lt;br/&amp;gt;
&amp;lt;br/&amp;gt;

## Final note.
At the time of writing this article, I faced an issue getting the client up and running using spring boot version `2.4.0`. I had to use the previous stable version `2.3.6`. 

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

&lt;/div&gt;

</description>
      <category>microservices</category>
      <category>java</category>
    </item>
    <item>
      <title>Managing configurations in microservices</title>
      <dc:creator>FaN000s</dc:creator>
      <pubDate>Fri, 23 Oct 2020 15:33:41 +0000</pubDate>
      <link>https://dev.to/devfanooos/managing-configurations-in-microservices-1l1o</link>
      <guid>https://dev.to/devfanooos/managing-configurations-in-microservices-1l1o</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclaimer&lt;/em&gt;&lt;br&gt;
&lt;em&gt;This post is part of a weekly writing challenge. Two of my friends and I agreed on holding a writing challenge in order to gain the writing habit as well as improving our writing skills.&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;In the age of cloud environments and microservices architecture, a need to different way to mange the configurations for application/application instances has appeared. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
For that purpose, software architects have many options to choose from. In this article we will talk briefly about some of the available options. In the next parts of this article we will go through each option in some details.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
The solutions we will talk about are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring cloud config server&lt;/li&gt;
&lt;li&gt;Central Dogma&lt;/li&gt;
&lt;li&gt;Consul&lt;/li&gt;
&lt;li&gt;Kubernetes ConfigMap and Secrets&lt;/li&gt;
&lt;/ul&gt;



&lt;h3&gt;
  
  
  &lt;a href="https://spring.io/projects/spring-cloud-config"&gt;Spring cloud config&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AGYsxbqt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t0jy0hczgzteq9qxh58y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AGYsxbqt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t0jy0hczgzteq9qxh58y.png" alt="Spring cloud config server"&gt;&lt;/a&gt;&lt;br&gt;
Spring cloud config is part of spring cloud tools that provides the ability to externalize the configurations in a distributed systems. The project consists of two parts, a config server and a config client. &lt;br&gt;
The config server is a simple spring boot application. It reads the configuration from a &lt;u&gt;configuration repository&lt;/u&gt; and provides it to &lt;em&gt;clients&lt;/em&gt;. The configuration server can be a directory on your file system, a git repository, or the &lt;a href="https://www.vaultproject.io/"&gt;HashiCorp Vault&lt;/a&gt; tool.&lt;/p&gt;

&lt;p&gt;You can store the configuration in either yaml or .properties and read it in yaml, properties, or json. &lt;/p&gt;

&lt;p&gt;Spring cloud config server also provides a REST API for the configuration, hence you can use it from any other technology. &lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;a href="https://line.github.io/centraldogma/index.html"&gt;Central Dogma&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kYynoX9U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d3ku2psa3nfqbbypx8l4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kYynoX9U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d3ku2psa3nfqbbypx8l4.png" alt="Central dogma"&gt;&lt;/a&gt;&lt;br&gt;
Central dogma is an open source configuration server based on git and zookeeper. &lt;br&gt;
Central dogma works almost the same way as spring cloud config server. It reads the configurations from a &lt;u&gt;configuration repository&lt;/u&gt; (git in this case) and provides them via REST Api, client library, and command line tool. &lt;br&gt;
Central dogma has some features that (in my opinion) makes it better than spring config server. &lt;br&gt;
Some of these features are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The command line tool&lt;/li&gt;
&lt;li&gt;User interface.&lt;/li&gt;
&lt;li&gt;Access control and per-repository permission. (This part is achieved in spring config server via the Vault tool)&lt;/li&gt;
&lt;li&gt;high-availability.&lt;/li&gt;
&lt;/ul&gt;



&lt;h3&gt;
  
  
  &lt;a href="https://www.consul.io/"&gt;Consul&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yEPdB6H5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lm0dr67bzmhqn9wx7nmo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yEPdB6H5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lm0dr67bzmhqn9wx7nmo.png" alt="Consul"&gt;&lt;/a&gt;&lt;br&gt;
Consul is a big tool provided by HashiCorp. It is known as a service discovery tool. It is much more comparable to Eureka than to config server tools but it also provides a key/value store which can be used as an external configuration server. &lt;br&gt;
Consul allows the users to store indexed objects (configuration objects) and it also replicate the data across multiple server which provide a high availability feature. &lt;/p&gt;

&lt;p&gt;The key/value store in Consul is very simple. It is not intended to be used as a replacement to key/value stores like Redis.&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;a href="https://kubernetes.io/docs/concepts/configuration/configmap/"&gt;Kubernetes ConfigMap and Secrets&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MUYHPSrz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lp5tkgt99fy9epzo78wf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MUYHPSrz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lp5tkgt99fy9epzo78wf.png" alt="Kubernetes ConfigMap"&gt;&lt;/a&gt;&lt;br&gt;
Kubernetes ConfigMap is much like Consul key/value store. Pods can consume the configuration from the ConfigMap as environment variables, command line arguments, and configuration files. &lt;br&gt;
The problem with config map is that it does not provide secrecy or encryption. So, if you need to store sensitive configurations, it is advised to use &lt;a href="https://kubernetes.io/docs/concepts/configuration/secret/"&gt;Kubernetes Secrets&lt;/a&gt; instead.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
In the next parts we will get into more details about each option.&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>springboot</category>
      <category>kubernetes</category>
      <category>consul</category>
    </item>
    <item>
      <title>What are your recommended books to learn event-driven architecture?</title>
      <dc:creator>FaN000s</dc:creator>
      <pubDate>Wed, 20 Nov 2019 11:49:47 +0000</pubDate>
      <link>https://dev.to/devfanooos/what-are-your-recommended-books-to-learn-event-driven-architecture-219b</link>
      <guid>https://dev.to/devfanooos/what-are-your-recommended-books-to-learn-event-driven-architecture-219b</guid>
      <description>&lt;p&gt;Recently, I came across a paper published by O'Reilly titled "Software Architecture Patterns. Understanding Common Architecture Patterns and When to Use Them". &lt;/p&gt;

&lt;p&gt;Although the paper is a little bit old (published 2015), It has a very good comparison between some software architecture patterns including n-tier, event-driven, and microservices. I highly recommend you to take a look at it.&lt;/p&gt;

&lt;p&gt;The way the event-driven architecture is explained is very interesting. So, I wanted to learn more about it. &lt;/p&gt;

&lt;p&gt;What are your recommended books to learn event-driven architecture?&lt;/p&gt;

</description>
      <category>learning</category>
      <category>evendriven</category>
      <category>help</category>
    </item>
    <item>
      <title>My Top 3 books to learn Java programming for beginners</title>
      <dc:creator>FaN000s</dc:creator>
      <pubDate>Sun, 10 Feb 2019 09:14:58 +0000</pubDate>
      <link>https://dev.to/devfanooos/my-top-3-books-to-learn-java-programming-for-beginners-2hkp</link>
      <guid>https://dev.to/devfanooos/my-top-3-books-to-learn-java-programming-for-beginners-2hkp</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fa3ih28l3bq12i2g7p5f7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fa3ih28l3bq12i2g7p5f7.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Java programming language is one of the most used programming languages in the world and there are thousands of books out there to learn various topics. &lt;/p&gt;

&lt;p&gt;Here are my top 3 books to learn java programming for beginners. Each of these books has its own style. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;1- How to think like a computer scientist.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This book is actually the introduction course to computer programming at MIT. The book exists in two versions. One in python and the other in Java. &lt;/p&gt;

&lt;p&gt;I usually recommend this book for computer science students. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;2- Murach's java programming&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to learn how to get your first steps in the java programming with more practice than theory, this is the book you need. &lt;/p&gt;

&lt;p&gt;All of Murach's publications follow the same pattern. The left page explains a specific point and the right page shows how to get this point done. So, if you open the book at any page you will find the theory at the left and the code at the right. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;3- Introduction to java programming by Daniel Liang&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am considering this book a piece of art. It contains a massive amount of information. Its language is very simple for a non-native English speaker like me. The content of the book is well organized. The book also contains some intermediate and advanced topics. &lt;/p&gt;

&lt;p&gt;The most thing I like about this book is its excersises. Each chapter has a set of excersises that start with simple tasks and its difficulty increase gradually. &lt;/p&gt;

</description>
      <category>java</category>
    </item>
    <item>
      <title>What are the most suitable datastores for storing a huge number of articles and news?</title>
      <dc:creator>FaN000s</dc:creator>
      <pubDate>Wed, 06 Feb 2019 11:43:57 +0000</pubDate>
      <link>https://dev.to/devfanooos/what-are-the-most-suitable-datastores-for-storing-a-huge-number-of-articles-and-news-b1</link>
      <guid>https://dev.to/devfanooos/what-are-the-most-suitable-datastores-for-storing-a-huge-number-of-articles-and-news-b1</guid>
      <description>&lt;p&gt;I am assigned to a new big project at my current company. The project will collect a huge number of news articles from different sources.&lt;/p&gt;

&lt;p&gt;The whole requirements still not clear but we can expect some of it. For example,&lt;/p&gt;

&lt;p&gt;Building some dashboards to display some statistics about the collected news.&lt;br&gt;
Full-text search (exact, fuzzy, and synonym)&lt;br&gt;
Providing a way to other teams (specifically data analysis team) to query the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What would you suggest as a datastore for such a project?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I believe there is no one-size-fits-all solution to this type of project.&lt;/p&gt;

&lt;p&gt;As a start, I am thinking in using &lt;em&gt;Elassandra&lt;/em&gt; as it combines both &lt;em&gt;Cassandra&lt;/em&gt; and &lt;em&gt;Elasticsearch&lt;/em&gt; which may satisfy the first two points (&lt;em&gt;Cassandra&lt;/em&gt; for aggregation and analytics and &lt;em&gt;Elasticsearch&lt;/em&gt; for full-text search).&lt;/p&gt;

&lt;p&gt;Still the third point not satisfied. The data analysis people are familiar more with &lt;em&gt;SQL&lt;/em&gt; which will not be 100% provided by either &lt;em&gt;Cassandra&lt;/em&gt; or &lt;em&gt;Elasticsearch&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The other approach I am thinking in is to have another storage for the analysis team and the application responsible for writing the data will write it to both storages.&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;

</description>
      <category>bigdata</category>
      <category>nosql</category>
      <category>cassandra</category>
      <category>elasticsearch</category>
    </item>
    <item>
      <title>Help needed: Spring batch + scheduled task = no transaction</title>
      <dc:creator>FaN000s</dc:creator>
      <pubDate>Sat, 02 Feb 2019 22:56:31 +0000</pubDate>
      <link>https://dev.to/devfanooos/help-needed-spring-batch--scheduled-task--no-transaction-3mph</link>
      <guid>https://dev.to/devfanooos/help-needed-spring-batch--scheduled-task--no-transaction-3mph</guid>
      <description>&lt;p&gt;I have a simple spring boot application with a scheduled task. The scheduled task starts a spring batch job. &lt;/p&gt;

&lt;p&gt;The scheduled task starts normally and the batch job works fine but nothing Is saved to the database. &lt;/p&gt;

&lt;p&gt;You can find all the details in this SO question &lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/54457041/spring-boot-repository-does-not-save-to-the-db-if-called-from-scheduled-job"&gt;https://stackoverflow.com/questions/54457041/spring-boot-repository-does-not-save-to-the-db-if-called-from-scheduled-job&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope anyone can help. &lt;/p&gt;

&lt;h1&gt;
  
  
  Edit
&lt;/h1&gt;

&lt;p&gt;I have updated the question at SO with the answer that worked for me.&lt;/p&gt;

</description>
      <category>spring</category>
      <category>java</category>
      <category>help</category>
      <category>jpa</category>
    </item>
  </channel>
</rss>
