Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $11.99/month after trial. Cancel anytime.

Derinlemesine Spring Boot Cloud
Derinlemesine Spring Boot Cloud
Derinlemesine Spring Boot Cloud
Ebook365 pages2 hours

Derinlemesine Spring Boot Cloud

Rating: 0 out of 5 stars

()

Read preview

About this ebook

Bilgi

Bu kitap Spring Cloud, MicroServices & Event-Driven Architecture konularını içermektedir. Başlangıçta Environment & Config Server işlemleri gösterilmektedir. Eureka & Feign ile service discovery içerilmektedir. OpenAPI / Swager ile API documentation & testing kapsamdadır. Actuator ile management anlatımaktadır. Redis ile memory database & cache konuları içerilmiştir. Events, Async & Schedule içerikte yer almaktadır. Cloud Function da kapsam içindedir. RabbitMQ ile queue & Kafka ile streaming içeriğine koyulmuştur. Docker ile deployment gösterilmektedir.

Yazar

Kitabın yazarı bilgisayar mühendisi Önder Teker, yazılım geliştirme alanında 1990'lı yılların sonlarından beri projeler geliştirmekte, 2000'li yılların başından beri eğitimler vermekte, 2010'lu yılların başından beri de kitap ve eğitim setleri üretmektedir.

LanguageTürkçe
PublisherGodoro
Release dateMay 4, 2023
ISBN9786057172587
Derinlemesine Spring Boot Cloud

Read more from Onder Teker

Related to Derinlemesine Spring Boot Cloud

Related ebooks

Reviews for Derinlemesine Spring Boot Cloud

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    Book preview

    Derinlemesine Spring Boot Cloud - Onder Teker

    Derinlemesine

    Spring

    Boot

    Cloud

    Önder Teker

    Godoro Yayıncılık

    GODORO YAYINCILIK

    Yayıncı Sertifikası No: 40946

    Kitabın Adı:

    Derinlemesine Spring Boot Cloud

    Copyright © 2023 Godoro Yayıncılık

    Kitabın Yazarı:

    Önder Teker

    Birinci Basım, Mayıs 2023, İstanbul

    ISBN:

    978-605-71725-6-3

    Kapak Tasarımı ve Mizanpaj:

    Önder Teker

    Baskı ve Ciltleme:

    Godoro

    Özel Baskı Çözümleri

    Atikali Mah. Fatih Cad. No: 81 D: 2

    Fatih / İstanbul

    Telefon : (533) 561-2435

    http://www.godoro.com

    GODORO YAYINCILIK

    Atikali Mah. Fatih Cad. No: 81 D: 2

    Fatih / İstanbul

    Telefon : (533) 561-2435

    Çevre (Environment)

    Bu bölümde çevre (environment) ile uygulama ilişkisi gösterilmektedir.  Aşağıdaki içerikte buyruk çizgisi (command line) ya da uçbirim (terminal) işlemleriyle takmalar (settings) ve yapılandırma (configuration) gibi konular anlatılmaktadır.

    Bohçalama (Packaging)

    Bu bölümde Maven aracını kullanarak geliştirilen bir projenin konuşlandırılabilir ve çalıştırılabilir bir uygulamaya dönüştürülmesi anlatılmaktadır.

    Java Evi (Java Home)

    Bir buyruk çizgisi (command line) ya da uçbirim (terminal) çevresinde Java uygulamalarının çalışması için JAVA_HOME (Java Evi) adlı çevre değişkeni (environment variable) değerinin bir JDK ya da JRE uygulamasının yolak (path) değerine atanması gerekir.  Başka bir uygulamaca işletim düzeninin yoksama değeri atanmış olabilir. Bu öğrenmek için uçbirimde  echo (yankıla) buyruğu kullanılabilir:

    echo %JAVA_HOME%

    Ekranda bir yazı basılmıyorsa ya da basılanlarda geçerli bir Java yolağı yoksa atama yapmak gerekir. Daha önce yapılmadıysa Windows için aşağıdaki gibi, set (tak) adlı buyrukla Java evi belirlenebilir:

    set JAVA_HOME=C:\Program Files\Java\jdk-17.0.5

    Linux için de, daha önce atama yapılıp yapılmadığı echo (yankıla) buyruğuyla sınanabilir:

    echo $JAVA_HOME

    Linux için de aşağıdaki gibi, export (dışaver) adlı buyrukla bir giriş yapılır:

    export $JAVA_HOME=/usr/lib/jvm/java-17-openjdk.

    MVN & MVNW Araçları

    Maven altyapısının yürütümlenebilir aracı mvnw (Maven Wrapper Maven Sarıcı), temel araç olan mvn (Maven) aracınının daha önce Maven kurmadan, gerektiğinde kurulmasıyla işlemleri yapabilmek için kullanılmaktadır. Bunu dışında mvnw aracı, mvn aracıyla yapılan işlemleri belli bir proje için yapılması için kullanılır. Spring projesinin kökünde bulunur ve geliştirilen projenin kendisiyle ilgili işlemler gerçekleştirir.

    Buyruklar (Commands)

    Bir geliştirme çevresi (development environment) üzerinde yapılan derleme (compile), temizleme (clean), yapılama (build), bohçalama (package) ve kurulumla (install) gibi işlemleri gerçekleştirir. Bir projeyi çalıştırılabilir duruma getirmek için clean (temizle) ve install (kurulumla) tartışımları birlikte verilir. Örneğin, bir projenin kökünde aşağıdaki gibi  

    mvnw clean install

    biçminde bir çağrı yapılırsa target (erek) klasörünün altında uygulamanın JAR dosyası oluşur. Çalışma zamanında gerekli olan özkaynaklar bu dosyanın içinde bulur.

    JAR

    Bir projenin kurulumlama (install) aşamasından sonra oluşan JAR dosyası aşağıdaki gibi konumda bulunur:

    ./target/myproject-0.0.1-SNAPSHOT.jar

    Burada target (erek) klasörü, projenin kökünde, kurulumlama sonrasında oluşturulmuştur.

    JAR dosyasının adı yapaylık (artifact) adının sonuna sürüm (version) adı verilerek oluşturulmaktadır. Söz konusu değerler pom.xml dosyasında project (izdüşü) adlı öğenin içinde yer alırlar:

    myproject

    0.0.1-SNAPSHOT

    Proje belli bir aşamaya gelince buradaki sürüm sayısının artırılması ve sondaki SNAPSHOT (Şipşak) adının silinmesi gerekir. Ancak, doğru olmasa da, hep aynı adla kullanmayı sürdürebilir.

    Koşturma (Run)

    Bir projeyi kurulumlama (install) aşamasından sonra çalıştırılmak için JDK ya da JRE ile birlikte kurulan java.exe programından yararlanılır. Bunar, JAR üzerinden çalıştırmak içi -jar diye bir tartışım verilir ve JAR dosyasının konumu bildirilir. Örnek:

    java -jar ./target/myproject-0.0.1-SNAPSHOT.jar

    Burada yapılan oluşturulan JAR dosyasının ölçün Java araçlarıyla yürütümlenmesinden oluşmaktadır.

    Bir projeyi kurulumlamadan çalıştırmak da olanaklıdır. Bunun için spring-boot:run biçiminde bir buyruk kullanılır. Örnek:

    mvnw spring-boot:run

    Bu buyruk, projenin kökünde çalıştırılır ve sonuna herhangi bir ad verilmez. JAR dosyasından değil, derlenmiş .class dosyalarından çalıştırma yapılmış olur. Buradaki yürütümleme, geliştirme çevresindeki Run (Koştur) düğmeleriyle aynı işlevi görür. Daha sonra üretim ortamında yürütümleme gibi çalışmaz.

    Buyruk Koşturma (Command Run)

    Bir örün uygulaması (web application) yapıldıktan sonra belli bir giriş kapısı (port) üzerinden HTTP önkurallığıyla ulaşılabilir duruma gelir. Bir gözatıcı (browser) ya da HTTP üzerinden bir istemci (client) ile uygulamaya erişilip bir takım işlemler gerçekleştirilebilir.

    Spring Boot uygulamaları içerisinde Tomcat gibi bir örün işgörücü (web server) ya da uygulama işgörücü (application server) gömülür. Bunu çalıştırma için buyruk çizgisi (command line) ya da uçbirim (terminal) çevre kullanılır. Bu yüzden konsol (console) uygulamaları gibi çalıştırma yapılmış olur. Konsol uygulamaları için geçerli olan çevreden tartışım (argument) alma gibi konular da yapılabilecekler arasında yer alır.

    CommandLineRunner (Buyruk Çizgisi Koşucu)

    Spring açısından bir çekirdek (bean) olan bir sınıf CommandLineRunner (Buyruk Çizgisi Koşucu) adlı arayüzü gerçekleştirip run() (koştur) yöntemini ezerse uygulama bir uçbirim çalıştırıldığında belli işlemlerin yapılması sağlanır. Sınıfın yapılandırma (configuration) ya da bileşen (component) gibi bir nitelik taşması gerekir. Örnek bir gerçekleştirim aşağıdaki gibi yapılabilir:

    @Component

    public class ApplicationRunner

    implements CommandLineRunner {

     @Override

     public void run(String... args) {

       System.out.println(Buyruk Koşucu);

     }

    }

    Uçbirimde aşağıdaki gibi buyruklar girilebilir:

    mvnw install

    java -jar ./target/command-0.0.1-SNAPSHOT.jar

    Konsola aşağıdaki yazı basılır:

    Buyruk Koşucu

    Uygulama Sınıfı (Application Class)

    Uygulamanın temel, main()  (ana) içeren sınıfı da bir buyruk koşturucu olabilir.

    @SpringBootApplication

    public class Spring15CommandApplication

    implements CommandLineRunner {

      public static void main(String[] args) {

       SpringApplication.run(

          Spring15CommandApplication.class, args);

     }

      @Override

     public void run(String... args) {

       System.out.println(Uygulama Koşucu);

     }

    }

    Tartışımlar

    Bir buyruk koşucu, uygulamaya uçbirimden aktarılan tartışım (argument) değerlerine erişebilir. Bu değerler çoktan run() (koştur) yöntemine aktarılmış durumdadır. Örnek bir kullanım aşağıdaki gibi ya

    @Override

    public void run(String... args) {

     for (String argument : args) {

       System.out.println(argument);

     }

    }

    Örnek

    Aşağıdaki örnekte CommandLineRunner (Buyruk Çizgisi Koşucu) arayüzünü gerçekleştiren bir bileşen yer almaktadır:

    @Component

    public class ApplicationRunner

    implements CommandLineRunner {

      @Override

     public void run(String... args) {

       System.out.println(Buyruk Koşucu);

        System.out.println(Tartışımlar:);

       for (String argument : args) {

         System.out.println( * + argument);

       }

     }

    }

    Uygulamanın yapaylık özdeşliği (artifact id) değerinin command (buyruk) olduğunu varsayalım. Uçbirimde aşağıdaki gibi buyruklar girilebilir:

    mvnw install

    java -jar ./target/command-0.0.1-SNAPSHOT.jar

    Konsola aşağıdaki yazı basılır:

    Buyruk Koşucu

    Uçbirimde tartışımlar (arguments) aşağıdaki gibi girilebilir:

    java -jar

     ./target/command-0.0.1-SNAPSHOT.jar Bir İki Üç

    Bu durumda konsola aşağıdaki yazılar basılır:

    Buyruk Koşucu

    Tartışımlar:

    * Bir

    * İki

    * Üç

    Çevre Değişkenler (Environment Variables)

    Bir uygulama, çevre değişkenleri (environment variables) adı verilen, uygulamanın çalıştığı bilgisayar ya da işletim düzeni (operating system) üzerinde tanımlı değerlere erişebilir. Söz konusu değerler uygulamalara arasında veri alışverişi ya da bir uygulamaya bilgilendirme aktarımı için kullanılabilir.

    Düzen Sınıfı (System Class)

    Java düzlemindeki System sınıfında getProperty() (özellik edin) ya da getenv() (get environment - çevre edin) adlı yöntemler kullanılabilir. Bunlardan özellik (property) adını taşıyanlar daha çok uygulamaya yönelik değerlerken çevre (environment) adını taşıyanlar daha genel niteliktedir.

    Bir çevre değişkeni aşağıdaki gibi edinilebilir:

    String myValue=System.getenv(MY_NAME);

    Herhangi bir açar (key) verilmezse tüm değerleri içeren Map (Eşlem) eld edilir:

    Map<String,String> values==System.getenv();

    Çevre Sınıfı (Environment Class)

    Spring çatımlamasında Environment (Çevre) adı verilen bir arayüzden çevre değişkenlerine erişilebilir. Bu arayüzü gerçekleştiren bir nesne @Autowired (Kendi Tellenmiş) açımlaması gibi bir seçenek kullanılarak içitme (injection) yoluyla edinilebilir. Örnek:

    @Autowired

    private Environment environment;

    Buradaki nesneye bir ad (name) verilerek çevre değişkenlerin değerine erişilebilir. Örnek

    String myValue=environment.getProperty(MY_NAME);

    Söz konusu sınıfta System  (Düzen) sınıfından edinilenlere göre kimi gelişmiş özellikler bulunmaktadır. Örneğin System sınıfındakiler yalnızca sicim (string) türünü tanırken,  Environment (Çevre) sınıfındakiler erek türü (target type) verilerek belli bir türde edinilebililer. Örnek:

    Long myValue=environment

    .getProperty(MY_NAME,Long.class);

    Environment (Çevre) adlı arayüzü kullanmanın bir yararı da uygulamanın çalıştığı; üretim, sınama, yerel gibi yanay (profile) bilgilendirmesiyle ilgili özellikler içermesidir.

    Yapılandırma Özellikleri (Configuration Properties)

    Bir uygulamaya dışarıdan aktarılan değeler application.properties (uygulama özellikleri) ya da application.yml (uygulama YML) gibi takmalar (settings) dosyalarında gelir. Öte yandan kimi değerler hem  takmalardan hem de çevreden gelebilir. Kimi durumlarda da takmalardaki değerin çevreden gelmesi sağlanır ve uygulama takmalardan gelen değeri kullanır. Bir takmalar dosyasında çevre değişkeni ${} işleciyle kullanılır. Örneğin YAML dosyasında aşağıdaki gibi

    my-prefix:

    my-property: ${MY_VARIABLE}

    biçiminde bir bildirim yapılabilir. Çevre değişkenini adıyla özellik adının aynı olması gerekmez. Ancak genelde aynı tutulur ki akılda kalsın. Buradaki gibi bildirilen değer Java düzgüsünde olağan bir özellik olarak kullanılabilir. Örneğin aşağıdaki gibi @ConfigurationProperties (Yapılandırma Özellikleri) açımlamasıyla bildirilmiş bir sınıf aşağıdaki gibi yazılmış olsun:

    @ConfigurationProperties(prefix = my-prefix)

    @Configuration

    public class EnvironmentProperties {

    }

    Burada dosyadaki özelliği herhangi bir sınıfından aşağıdaki gibi bir bildirimle erişilir:

    private String myProperty;

    Spring çatımlamasında uylaşım (convention) gereği - (tire - dash) ile, my-property biçiminde bildirilen bir özellik, myProperty gibi deve durumu (camel case) ile kullanılır.

    Uyarlı Değişken (Custom Variable)

    Gerektiğinde geliştiriciler ya da uygulamayı kuranlar uyarlı değişken (custom variable) tanımlayabilirler. Bu biçimde uygulamayla dışında bulunan çevre arasında bilgilendirme üleşimi gerçekleşir. Örneğin uçbirimde Windows için aşağıdaki gibi

    set CUSTOM_VALUE=Uyarlı Değerim

    biçiminde, Linux için de aşağıdaki gibi

    export $CUSTOM_VALUE=Uyarlı Değerim

    biçiminde bir değer bildirilmiş olsun. Bunu bir çevre değişkeni olarak kullanmak olanaklıdır. Örneğin Environment (Çevre) arayüzünden aşağıdaki gibi kullanım yapılabilir:

    System.out.println(

       environment.getProperty(CUSTOM_VALUE));

    Örnek

    Aşağıda örnek bir application.yml dosyası yer almaktadır:

    surroundings:

    java-home: ${JAVA_HOME}

    custom-value: ${CUSTOM_VALUE}

    Bunları kullanan bir yapılandırma özellikleri (configuration properties) sınıfı aşağıdaki gibi yazılabilir:

    @ConfigurationProperties(prefix = surroundings)

    @Configuration

    public class EnvironmentProperties {

     private String javaHome;

     private String customValue;

     // Getters & Setters

    }

    Gerek yukarıdaki özellikler sınıfından, gerekse doğrudan çevreden olacak biçimde değerleri alan bir koşucu (runner) sınıfı aşağıdaki gibi yazılabilir:

    @Component

    public class EnvironmentRunner

    implements CommandLineRunner {

      @Autowired

     private Environment environment;

     @Autowired

     private EnvironmentProperties

    environmentProperties;

      @Override

     public void run(String... args) {

       System.out.println(Çevre Koşucu);

        System.out.println(\tDüzenden Java Evi:

           +System.getenv(JAVA_HOME));

       System.out.println(\tDüzenden Uyarlı Değer:

           +System.getenv(CUSTOM_VALUE));

        System.out.println(\tÇevreden Java Evi:

           +environment.getProperty(JAVA_HOME));

       System.out.println(\tÇevreden Uyarlı Değer:

           +environment.getProperty(CUSTOM_VALUE));

        System.out.println(\tÖzellikten Java Evi:

           +environmentProperties.getJavaHome());

       System.out.println(\tÖzellikten Uyarlı Değer:

           +environmentProperties.getCustomValue());

     }

    }

    Uçbirimde aşağıdaki satırlardan ilkini Windows, ikincisini Linux için girebiliriz

    set CUSTOM_VALUE=Uyarlı Değerim

    export $CUSTOM_VALUE=Uyarlı Değerim

    Uygulama buyruk çizgisinden çalıştırılınca konsola aşağıdaki gibi çalıştırılabilir:

    mvnw install

    java -jar ./target/command-0.0.1-SNAPSHOT.jar

    Windows düzeninde konsola aşağıdaki gibi yazılar basılır:

    Çevre Koşucu

     Düzenden Java Evi: C:\Program Files\Java\jdk-17.0.5

     Düzenden Uyarlı Değer: Uyarlı Değerim

     Çevreden Java Evi: C:\Program Files\Java\jdk-17.0.5

     Çevreden Uyarlı Değer: Uyarlı Değerim

     Özellikten Java Evi: C:\Program Files\Java\jdk-17.0.5

     Özellikten Uyarlı Değer: Uyarlı Değerim

    Değer (Value)

    Spring Boot çatımlamasında @Value (Değer) açımlamasıyla uygulama takmaları (application settings) dosyalarındaki özellikleri doğrudan bir çekirdek (bean) nesnesinin bir tarla (field) öğesine alabilirler. Böylece özellikleri yüklemek gibi işlemlerle uğraşılmamış olur.

    @Value Annotation (Değer Açımlaması)

    Bir çekirdek (bean) sınıfının, örneğin bileşen (component), denetleyici (controller) ya da işgörü (service) türü nesnelerin bir tarla (field) öğesine @Value (Değer) açımlamasıyla alınabilir. Buna öznitelik olarak takmalar dosyasındaki özelliğin dolu adı (full name) bir dışavurum (expression) olarak verilir. Örneğin YAML dosyasında

    my-prefix:

    my-property : Özelliğim

    ya da properties (özellikler) uzantlı dosyalarda

    my-prefix.my-property : Özelliğim

    biçiminde verilen değer bir tarla olarak aşağıdaki gibi alınabilir:

    @Value(${my-prefix.my-property)

    private String myField;

    Örnek

    Uygulamanın application.yml dosyasında aşağıdaki gibi iki özellik bildirilmiş olsun:

    parameters:

    parameter-one: Değiştirgen Bir

    parameter-two: Değiştirgen İki

    Bu özellikleri değer olarak bir koşucu (runner) sınıfı aşağıdaki gibi yazılabilir:

    @Component

    public class ValuesRunner

    implements CommandLineRunner {

    @Value(${parameters.parameter-one})

     private String parameterOne;

    @Value(${parameters.parameter-two})

     private String parameterTwo;

      @Override

     public void run(String... args) {

       System.out.println(Değerler Koşucu);

       System.out.println(

           \tDeğer Bir: + parameterOne);

       System.out.println(

           \tDeğer İki: + parameterTwo);

     }

    }

    Uygulama aşağıdaki gibi çalıştırılabilir:

    mvnw install

    java -jar ./target/command-0.0.1-SNAPSHOT.jar

    Konsol çıktısı aşağıdaki gibi olur:

    Değerler Koşucu

           Değer Bir: Değiştirgen Bir

           Değer İki: Değiştirgen İki

    Tartışımlar (Arguments)

    Bir uygulamada özellikler (properties) dosyalarından gelen değerler yerine buyruk çizgisi (command line) ya da uçbirim (terminal) çevresinde uygulamaya tartışım (argument) olarak değer verilebilir. Dahası, dosyalardaki özelliklerinde değerler, tartışım değerleriyle ezilerek uygulamanın başka değerlerle çalışması sağlanabilir.

    Uygulama Tartışımı (Application Argument)

    Bir uygulamaya -- (iki tire - two dashes) ile özellik değerleri verilebilir. Örneğin uçbirimde uygulamayı aşağıdaki gibi çağıralım:

    java -jar ./target/command-0.0.1-SNAPSHOT.jar

    --parameters.parameter-one=Ayrı Değiştirgen

    Yukarıdaki dışavurumların tek satırda girilmesi gerekir. Tartışımın .jar biçimindeki uygulama dosyasından sonra verilmesi gerekir.

    Bu durumda dışarıdan alınan iki değiştirgenden birisinin değeri burada verildiği gibi olur. Bu özelliklerle ilgili ekran çıktısı aşağıdaki gibi olur:

    Değerler Koşucu

     Değer Bir: Ayrı Değiştirgen

     Değer İki: Değiştirgen İki

    Düzen Özelliği (System Property)

    Bir özelliği, JVM çevresindeki düzen özelliği (system property) olarak kullanmak olanaklıdır. Bu tür bir özellik System (Düzen) sınıfındaki getProperties() (özellikler edin) yöntemiyle erişilebilir olur. Spring çatımlaması @Value (Değer) gibi açımlamalarda düzen özelliklerinden de değer alır.

    java -jar

    -Dparameters.parameter-one=Düzenden   

     ./target/command-0.0.1-SNAPSHOT.jar

    Bu durumda çıktı aşağıdaki gibi olur:

    Değerler Koşucu

     Değer Bir: Düzenden

     Değer İki: Değiştirgen İki

    Aynı ad (name) ile hem düzen özelliği (system property) hem de uygulama tartışımı (application argument) verilirse öncelik tartışımdadır. Örneğin aşağıdaki gibi bir koşturma yapalım:

    java -jar

    -Dparameters.parameter-one=Düzenden

     ./target/command-0.0.1-SNAPSHOT.jar

    --parameters.parameter-one=Tartışımdan

    Konsola aşağıdaki gibi çıktı basılır:

    Değerler Koşucu

     Değer Bir: Tartışımdan

     Değer İki: Değiştirgen İki

    Yapılandırma Konumu (Configuration Location)

    Bir uygulamanın temede kullanılan takmalar (settings) değerleri application.properties veya application.yml dosyalarından okunur. Söz konusu dosyalar da projenin kök (root) klasöründe bulunur. Ancak istenirse, sınama amaçlı olarak ya da belli bir durum ya da çevre için uygulamanın ayrı biçimde çalıştırmak için ana özellik dosyalarının ad (name) değerleri ya da konumları ayrı olarak verilebilir. Kökenlilerin silinmesi gerekmez, bu değerler onları ezer. Bunun için -D ile gösterilen JVM tartışımı (JVM argument) değerleri kullanılabilir. Adı spring.config.location (Spring Yapılandırma Konumu) adlı özelliğe başka bir dosya verilebilir. Örneğin aşağıdaki gibi bir konumda bir özellikler dosyası olsun:

    D:\MyConf\application2.properties

    Bunun içeriği de aşağıdaki gibi olsun:

    parameters:

    parameter-one: Değiştirgen I.

    parameter-two: Değiştirgen II.

    Burada konum da dosya adı da

    Enjoying the preview?
    Page 1 of 1