Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me



Merhabalar, bu post altında Java 8 itibariyle gelen ve gelecek olan yenilikleri paylaşıyorum.


#Java18 Features:

  • UTF-8 by Default
  • Simple Web Server
  • Code Snippets in Java API Doc
  • Reimplement Core Reflection with Method Handles
  • Vector API
  • Internet-Address Resolution SPI
  • Foreign Function & Memory API
  • Pattern Matching for switch


#Java17 Features (Long Term Support) :

  • Restore Always-Strict Floating-Point Semantics
  • Enhanced Pseudo-Random Number Generators
  • New macOS Rendering Pipeline
  • macOS/AArch64 Port
  • Deprecate the Applet API for Removal
  • Strongly Encapsulate JDK Internals
  • Pattern Matching for switch


#Java16 Features:

  • Vector API
  • Enable C++14 Language Features
  • Migrate from Mercurial to Git
  • Migrate to GitHub
  • Concurrent Thread-Stack Processing
  • Unix-Domain Socket Channels
  • Alpine Linux Port
  • Elastic Metaspace
  • Windows/AArch64 Port


#Java15 Features

  • Sealed Classes and Interfaces
  • EdDSA Algorithm
  • Hidden Classes
  • Pattern Matching for instanceof
  • Removed Nashorn JavaScript Engine
  • Reimplement the Legacy DatagramSocket API
  • Records (Second Preview)
  • Text Blocks become a standard feature


#Java14 Features

  • Pattern Matching for instanceof
  • Text Blocks
  • Helpful NullPointerExceptions
  • Records
  • Switch Expressions
  • Packaging Tool
  • NUMA-Aware Memory Allocation for G1
  • JFR Event Streaming
  • Non-Volatile Mapped Byte Buffers
  • Remove the Pack200 Tools and API


#Java13 Features:

  • Text Blocks (Preview)
  • Switch Expressions Enhancements (Preview)
  • Reimplement the Legacy Socket API
  • Dynamic CDS Archive
  • ZGC: Uncommit Unused Memory
  • FileSystems.newFileSystem() Method
  • DOM and SAX Factories with Namespace Support


#Java12 Features:

  • Collectors.teeing() in Stream API
  • String API Changes
  • Files.mismatch(Path, Path)
  • Compact Number Formatting
  • Support for Unicode 11
  • Switch Expressions (Preview)


#Java 11 Features (Long Term Support):

  • HTTP Client API
  • Launch Single-File Programs Without Compilation
  • String API Changes
  • Collection.toArray(IntFunction)
  • Files.readString() and Files.writeString()
  • Optional.isEmpty()


#Java10 Features:

  • Local Variable Type Inference
  • Time-Based Release Versioning
  • Garbage-Collector Interface
  • Parallel Full GC for G1
  • Heap Allocation on Alternative Memory Devices
  • Consolidate the JDK Forest into a Single Repository


#Java9 Features:

  • Java platform module system
  • Interface Private Methods
  • HTTP 2 Client
  • JShell
  • Platform and JVM Logging
  • Process API Updates
  • Collection API Updates
  • Improvements in Stream API
  • Multi-release JAR Files
  • @Deprecated Tag Changes
  • Stack Walking


#Java8 Features (Long Term Support):

  • Lambda expression
  • Stream API
  • Functional interface
  • Default and static methods
  • Optional class
  • Nashorn – JavaScript runtime engine
  • Unsigned Integer Arithmetic
  • Repeating annotations
  • New Date and Time API


Kaynak : Turkey Java User Group

 

Merhabalar, bu post altında takip ettiğim Java bloglarını paylaşıyorum. Yeni takip ettiğim bloglar oldukça bu yazıyı güncelliyorum.

Merhabalar, bu yazımda Intellij IDEA kullananlar için faydalı olacağını düşündüğüm bir cheat sheet paylaşıyorum.



Kaynak: https://www.jrebel.com/resources/java-resources#Java-Cheat-Sheets 

Merhabalar, bu yazımda Regex yazarken yararlı olabileceğini düşündüğüm bir cheat sheet paylaşıyorum.



Kaynak: https://www.jrebel.com/resources/java-resources#Java-Cheat-Sheets 

Merhabalar, bu yazımda Java developer olanların veya olmak isteyenlerin nasıl bir yol izlemesiyle ilgili oluşturulan yararlı bir grafiği paylaşmak istiyorum.


 

Kaynak: https://github.com/devoxx/JavaRoadmap2022 

  Merhabalar, bu yazımda yazılımda kullanılan design pattern'ların tümünün tek bir görselde toplandığı diagramı paylaşmak istiyorum.




Kaynak: Java Guides

  Merhabalar, bu yazımda mikroservis mimarisinde kullanılan pattern'leri gösteren bir diagramı paylaşmak istedim



Kaynak: Igor De Souza

 Merhabalar, bu yazımda mikroservis mimarisine yeni başlayacak olanlara yol gösterebileceğini düşündüğüm bir diagramı paylaşmak istedim


Kaynak: GuidesJava



Parola doğrulamasında kullanılabilecek regex

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\S+$).{8,}$
^                 # İfadenin başlangıcı(?=.*[0-9])       # En az bir rakam olmalıdır(?=.*[a-z])       # En az bir küçük harf olmalıdır(?=.*[A-Z])       # En az bir büyük harf olmalıdır(?=.*[@#$%^&+=])  # En az bir özel karakter olmalıdır(?=\S+$)          # Whitespace karakter olmamalıdır.{8,}             # En az 8 karakterden oluşmalıdır$                 # İfadenin bitişi

 

Bu yazımda Github'a yüklediğimiz Spring projemizi nasıl Jenkins ile Tomcat üzerine otomatik deploy edeceğimizi anlatacağım. Önceki yazılarımda Ubuntu sunucusunun nasıl kurulacağını ve Tomcat'in nasıl yükleneceğini bulabilirsiniz.

Buradan Jenkins download sayfasına gidiyoruz. “LTS” versiyonu kısmından Ubuntu server kurduğumuz için “Ubuntu/Debian” seçeneğini seçiyoruz.


Yukarıda gösterilen komutlar ile Jenkins’i kurmaya başlayabiliriz.

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

Öncelikle Jenkins için key bilgisini sistemimize ekliyoruz.

cd etc
cd apt
vi sources.list

Daha sonra sources.list dosyasını metin editörümüz ile açıyoruz.

deb https://pkg.jenkins.io/debian-stable binary/

Yukarıdaki komutu sources.list dosyamızın içerisine ekliyoruz.

sudo apt-get update
sudo apt-get install jenkins

Yukarıdaki komutları çalıştırarak Jenkins’in kurulumunu gerçekleştiriyoruz.


Yukarıda bu işlemlerdeki tüm komutları ve çıktıları görebilirsiniz.


cd ..
cd default
vi jenkins

Daha sonra yukarıdaki komutları çalıştırarak jenkins dosyasını metin editörü ile açıyoruz ve port kısmını 8081 olarak güncelliyoruz.

sudo service jenkins start
sudo service jenkins stop

Yukarıdaki komutlar ile Jenkins’i başlatıp durdurabiliriz. Jenkins’i balatıyoruz.


AWS konsoldaki sunucumuzun ip adresini kullanarak 8081 portuna bağlanıyoruz. Jenkins’in çalıştığını görebilirsiniz. Kırmızı ile yazan dosyada admin parolamız var. Bu parola ile Jenkins’e giriş yapabiliriz.

sudo vi /var/lib/jenkins/secrets/initialAdminPassword

Yukarıdaki komutu çalıştırıyoruz ve açılan dosyadaki metni kopyalayarak parolamızı giriyoruz.


“Install suggested plugins” seçeneğini seçerek önerilen eklentiler ile devam ediyoruz. Eğer isterseniz diğer seçeneği seçerek seçtiğiniz eklentiler ile devam edebilirsiniz.


Burada kısa bir süre bekliyoruz ve Jenkins gerekli eklentileri kuruyor.


Daha sonra bir admin kullanıcısı oluşturuyoruz.


Daha sonra açılan ekranda Jenkins’in erişim url bilgisini görebilirsiniz. Sizin ip adresiniz farklı olacağı için bu kısım farklılık gösterecektir.


İlerilediğimizde Jenkins’in anasayfası açılacaktır. “Jenkins’i Yönet” diyerek bir kaç ayar yapmamız gerekiyor.


“Global Tool Configuration” seçeneğini seçiyoruz.


Açılan sayfada “JDK” bölümünde sistemimizdeki “JAVA_HOME” parametresini Jenkins’e tanıtıyoruz. Muhtemelen sizin sisteminiz için de aynı değerler olacaktır ancak farklı şekilde yaptıysanız buradan nasıl JAVA_HOME parametresini bulacağınızı öğrenebilirsiniz.



Jenkins’e sistemimizdeki Git’i tanıtıyoruz. Buraya yazacağınız değerler de muhtemelen aynıdır ancak yukarıdaki komutu konsolda çalıştırarak Git’in nerede kurulu olduğunu bulabilirsiniz.




Maven için de benzer ayarlamaları yapıyoruz. “MAVEN_HOME” parametresini yukarıdaki şekilde sisteminizde öğrenebilirsiniz. Bu ayarlamaları yaptıktan sonra kaydediyoruz.


Jenkins’in anasayfasına dönüyoruz ve “Yeni Item” seçeneği ile yeni bir proje ekliyoruz. Proje adına istediğinizi verebilirsiniz. “Serbest-stil yazılım projesi yapılandır” seçeneğini seçerek “OK” diyoruz.


Daha sonra karşımıza tüm ayarlamaları yapacağımız ekran çıkıyor.


“Kaynak Kodu Yönetimi” bölümüne Github Spring projemizin url’ini veriyoruz.


“Yapılandırma” bölümüne “En üst seviye Maven hedeflerini çalıştır” seçeneğini ekliyoruz.


“Maven Versiyonu” olarak ayarlamalarını yaptığımız Maven’ı seçiyoruz ve “Hedefler” bölümüne “package” yazarak “Kaydet” seçeneğini seçiyoruz.


Açılan ekranda “Şimdi Yapılandır” seçeneğini seçerek oluşturduğumuz projeyi başlatıyoruz ve build alıyoruz.


Sol alt kısma yapılandırmamızın geldiğini görebilirsiniz. Üzerine tıklıyoruz ve açılan ekranda “Console Output” seçeneğini seçiyoruz.



“Finished: SUCCESS” yazısını görene kadar bekliyoruz. Bu yazıyı gördüğümüzde başarılı bir şekilde projemizin build olduğunu anlayabiliriz.

“Projeye Geri Dön” seçeneğini seçerek proje sayfasını açıyoruz.


Proje sayfasında “Çalışma Alanı” seçeneğini seçiyoruz.


Açılan klasör yapısında “target” klasörüne giriyoruz ve “war” dosyamızın oluştuğunu görebiliriz.


Jenkins’in anasayfasına dönüyoruz, “Jenkins’i Yönet” ve ardından “Eklentileri Yönet” seçeneklerini seçiyoruz.


“Kullanılabilir” sekmesine tıklıyoruz ve arama kısmına “deploy” yazıyoruz. “Deploy to container” eklentisini seçerek “Download now and install after restart” seçeneğini seçiyoruz. Bu şekilde build aldığımız war dosyasını kolaylıkla Tomcat üzerine deploy yapabileceğimiz eklentiyi kuruyoruz. Jenkins’in yeniden başlatılmasını bekliyoruz.


Jenkins’in anasayfasından tekrar projemizi açıyoruz ve “Konfigürasyonu Düzenle” seçeneğini seçiyoruz. “Yapılandırma Sonrası Aksiyonlar” bölümüne “Deploy war/ear to a container” seçeneğini ekliyoruz.

“WAR/EAR files” bölümüne “**/*.war” ekliyoruz. Bu şekilde build aldığımızda oluşan war dosyasının ismi ne olursa olsun direkt olarak deploy edilmek üzere bulunabiliyor.

“Context path” bölümüne url kısmında gözükecek path bilgisini veriyoruz.


“Containers” bölümünde, Tomcat 8 kurduğumuz için bu seçeneği seçiyoruz. Bu bölümdeki “Add” seçeneğini seçtiğimizde yukarıdaki gibi bir pop-up açılıyor. Buraya “tomcat-users.xml” dosyasına eklediğimiz kullanıcı bilgilerini giriyoruz. Burada dikkat edilmesi gereken nokta bu kullanıcıya “manager-script” rolü tanımlı olması gerekiyor.

“Tomcat URL” kısmına ip adresimizi ve 8080 portunu giriyoruz. Ben örneği yaparken sunucuyu restart etmem gerektiği için ip adresim değişti, bu yüzden tekrar AWS konsolun “IPv4 Public IP” alanındaki ip adresini alarak buraya girdim. Buraya girmeniz gereken ip adresi AWS konsolda bulunan ip adresidir. Sizin de sunucunuz restart olursa veya bir şekilde ip adresiniz değişirse buradaki ip adresini güncellemeniz gerekiyor.


Değişikliklerimizi kaydediyoruz ve projenin sayfasından “Şimdi Yapılandır” seçeneği ile tekrar projemizi yapılandırıyoruz. Yapılandırmanın detaylarını açarak “Console Output” seçeneği ile konsol çıktısını görüntülüyoruz. “Finished: SUCCESS” yazısını gördüğümüzde build ve deploy işleminin başarılı bir şekilde gerçekleştiğini anlayabiliriz.


Tomcat url’imizin sonuna yapılandırma ayarlarına eklediğimiz “Context Path” parametresini ekleyerek açtığımız bağlantı bizim projemizin path’i oluyor. Daha sonra buna Spring Boot ile oluşturduğum rest api endpoint’ini ekleyerek bağlantıyı açıyorum. Spring Boot ile oluşturduğum rest api’nin çalıştığını görebilirsiniz. Sizin oluşturduğunuz Spring Boot projenizin endpoint'i farklı olabileceği için o endpoint'i açabilirsiniz.

Artık Github’a push’ladığımız her commit’ten sonra Jenkins’indeki projemizi yapılandırarak otomatik olarak Tomcat’i güncelleyebiliriz ve sunucumuza değişiklikleri yansıtabiliriz.