Tag: springboot

İlk Spring Boot Uygulaması

Bu yazıdaki hedefimiz spring boot’un derinlerine inmek değil, hello-world uygulama yazıp, çalıştırılabilir .jar olarak paketleyip servisin çalışırlığını test etmektir.

Başlamadan önce biraz bahsetmek isterim. Spring boot, eskide kalan ve uygulama sunucusuna ihtiyaç duyan .war paketi yerine tüm ihtiyaçlarını .jar paketi içinde toparlamayı sağlayan bir Spring framework kütüphanesidir. En temel özelliği, yazılacak uygulamanın servis katmanını, istenilen methodlar veya interface method signature’ları üzerindeki notasyonlar ile kolaylıkla yönetebilmektir.

Hızlıca günün gereksinimlerini açıklayayım:

  • maven 3.0 +

  • java 1.8

  • Ide (eclipse)

1. Method ve Notasyonları

Klasik bir maven projesi oluşturup, “hello-world” yazdırabilmek için App.java sınıfını şu şekilde düzenliyoruz. Daha başka konfigurasyona ihtiyaç duymadan servisimizi kullanılabilir hale getiriyoruz…

Aşağıdaki commentlerde hangi satırın ne işe yaradığı açıklanmaktadır.

@EnableAutoConfiguration
@RestController
public class App {
public static void main(String[] args) { // starter method
SpringApplication.run(App.class, args); // spring boot uygulaması burada tetikleniyor.
}

@RequestMapping(“/”) // request mapping sağlanıyor. şimdilik sadece root dizininde, parametresiz, yalın bir çağırım gerçekleştiriliyor.
public String home() {
return “Hello Docker World”;
}
}

2. Bağımlılıklar ve Parent

Kodu yazdıktan sonra .pom dosyasına sadece şu dependency’leri eklememiz yeterli olacaktır:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.3.3.RELEASE</version>
</dependency>

Projenin parent’i olarak spring-boot-starter-parent belirliyoruz. Bu parent projenin .jar olarak start edilebilmesini sağlayacak olan manifestleri içermektedir. Bir konfigurasyon beklememektedir. Eğer parent’i eklemek istemezseniz manifest ve diğer konfigurasyonları manuel yapmanız gerekecektir. <dependencies> node’unun üstüne / dışına yazmamız uygun olacaktır.

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>

Eğer “parent kullanmak istemiyorum. Projemdeki jpa’nın persistence dosyası veya diğer bağımlılıklar ile çakışmalar yaratıyor” diyorsanız spring-boot-maven-plugin eklentisini aşağıdaki ikinci yöntem gibi düzenleyebilirsiniz.

3. Plugin’ler

Aşağıda targetteki java sürümünü 1.8 olarak belirlememizi sağlayan compiler plugin ve spring boot’u executable package haline getirmemizi sağlayan eklentiler yer almaktadır.

Maven compiler plugin, projenin diğer bağımlılıklarını .jar dosyasına include etmeyi sağlar. Ayrıca bu plugin ile compiling jre version belirlenebilir.

<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>

Parent’i kullanıyorsanız:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin></plugins></build>

Parent’i kullanmadan:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.5.RELEASE</version>
<configuration>
<mainClass>com.test.App</mainClass>
<finalName>${project.build.finalname}</finalName>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

Yukarda spring-boot ile paketleme işlemi yaptık. Normal paketleme executable package oluşturamıyor; spring boot’a özel paketleme gerekiyor. Ayrıca yukarıda görüldüğü gibi bir main class ve harici output dir verilebiliyor.

4. Packaging

Benim kullandığım projede “jpa ile ilgili problemlerimi” görmezden gelirsek, sadece mvn package çalıştırarak paketimizi oluşturabiliyoruz.

mvn clean package spring-boot:repackage

5. Start

Sonrasında windows konsolu, linux konsolu veya Jenkins CI Tool ile aşağıdaki kodu tetikleyerek servisi çalışır hale getirebiliriz.

java -jar bootsample.jar

Not: Ben docker içinde kullanacağım için işim henüz bitmedi. Docker’in image’ında çalışma ortam bilgileri de set edilmesi gerekiyormuş… araştırmaya devam edeceğim ve bir container içinde harici kaynaklar ile çalışan bir uygulama yazacağım.

Saygılarımla

sefersezer@gmail.com