Eğitim Portalı/Spring Boot/Gömülü Sunucu Yapılandırması (Tomcat Port & Sunucu Ayarları)
Spring Boot03-spring-boot/22-tomcat-port-ve-sunucu

Gömülü Sunucu Yapılandırması (Tomcat Port & Sunucu Ayarları)

Spring Boot'un en büyük kolaylıklarından biri gömülü web sunucusudur: uygulaman bir .jar olarak çalışır ve içinde Tomcat (varsayılan), Jetty veya Undertow bulunur — ayrıca bir sunucu kurup .war dağıtmana gerek yoktur.…

Gömülü Sunucu Yapılandırması (Tomcat Port & Sunucu Ayarları)

Spring Boot'un en büyük kolaylıklarından biri gömülü web sunucusudur: uygulaman bir .jar olarak çalışır ve içinde Tomcat (varsayılan), Jetty veya Undertow bulunur — ayrıca bir sunucu kurup .war dağıtmana gerek yoktur. java -jar uygulama.jar dersin, sunucu da başlar. Bu konu, gömülü sunucuyu (port, context-path, sunucu ayarları) nasıl yapılandıracağını ele alır.

Port ve context-path

En sık ayarlananlar application.properties ile:

server.port=9090                       # dinlenecek port (varsayılan 8080)
server.servlet.context-path=/app       # tüm uçlar bu önek altında (örn. /app/api/...)
server.port=0                          # 0 -> rastgele boş port (test için kullanışlı)

Not: Bu portal örnekleri 8080'de çalıştırır (runner böyle sabitler); bu yüzden portu değiştirmiyoruz. Örnek 1 (./Ornek1.java) bunun yerine context-path'i programatik /app yapar ve uçlara /app/... altından erişir.

Programatik yapılandırma: WebServerFactoryCustomizer

Daha ileri ayarlar için (kod ile) WebServerFactoryCustomizer kullanılır:

@Bean
WebServerFactoryCustomizer<ConfigurableWebServerFactory> ozellestir() {
    return factory -> {
        factory.setContextPath("/app");
        factory.setPort(9090);          // (portal'da runner 8080'i zorlar)
    };
}

Tomcat'e özel ince ayar için TomcatServletWebServerFactory ile bağlantı (connector), thread havuzu, zaman aşımı gibi parametreler ayarlanır.

Sık kullanılan sunucu ayarları

server.tomcat.threads.max=200             # iş parçacığı havuzu
server.tomcat.connection-timeout=20s
server.tomcat.max-connections=8192
server.compression.enabled=true           # yanıt sıkıştırma (gzip)
server.error.include-message=always       # hata yanıtında mesaj
server.servlet.session.timeout=30m
server.shutdown=graceful                  # nazik kapanış (mevcut istekleri bitir)

Sunucuyu değiştirmek: Jetty / Undertow

Varsayılan Tomcat yerine başka bir sunucu kullanabilirsin — spring-boot-starter-web'den Tomcat'i hariç tutup ilgili starter'ı eklersin:

implementation('org.springframework.boot:spring-boot-starter-web') {
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}
implementation 'org.springframework.boot:spring-boot-starter-jetty'  // veya -undertow

Gömülü sunucu vs harici (WAR) dağıtım

Gömülü (jar)Harici (war)
Çalıştırmajava -jar app.jarBir Tomcat'e .war dağıt
SunucuUygulamanın içindeAyrı kurulu
Modern tercihEvet (mikroservis, konteyner)Eski/kurumsal ortamlar

Gömülü model, konteyner (Docker) ve mikroservis dünyasının standardıdır: "uygulama = sunucu dahil tek artefakt". (Harici WAR dağıtımı bir geçiş senaryosu olarak hâlâ desteklenir; ayrı bir konu.)

Özet

Spring Boot'un gömülü sunucusunu öğrendik: port/context-path yapılandırması, programatik WebServerFactoryCustomizer (Örnek 1 — context-path /app), thread/timeout/sıkıştırma gibi sunucu ayarları ve Tomcat yerine Jetty/Undertow seçimi; gömülü (jar) vs harici (war) dağıtım farkı. Gömülü sunucu, "tek artefakt" modeliyle modern dağıtımın temelidir. Sırada — sonraki turdan itibaren — mikroservis ve cloud konuları (Eureka, Gateway, Config, Kafka, Docker…) kavramsal olarak işlenecek.

Kod Örnekleri(1)

Ornek1

ortam gerekir
Ornek1.java
1// Ornek1: Gömülü sunucu (Tomcat) yapılandırması — port, context-path, WebServerFactoryCustomizer.
2// Çalıştırma: portal gömülü Tomcat ile başlatır (port 8080); self-test context-path ile çağırır.
3package com.egitim.springboot.sunucu;
4
5import org.springframework.beans.factory.annotation.Value;
6import org.springframework.boot.CommandLineRunner;
7import org.springframework.boot.SpringApplication;
8import org.springframework.boot.autoconfigure.SpringBootApplication;
9import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
10import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
11import org.springframework.boot.web.server.WebServerFactoryCustomizer;
12import org.springframework.context.annotation.Bean;
13import org.springframework.web.bind.annotation.GetMapping;
14import org.springframework.web.bind.annotation.RestController;
15import org.springframework.web.client.RestClient;
16
17import java.util.Map;
18
19@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
20public class Ornek1 {
21
22    public static void main(String[] args) { SpringApplication.run(Ornek1.class, args); }
23
24    // WebServerFactoryCustomizer: gömülü sunucuyu PROGRAMATİK yapılandır (port, context-path, sıkıştırma...).
25    // (Burada uygulamayı /app altına alıyoruz; portu 8080'de bırakıyoruz — portal öyle başlatıyor.)
26    @Bean
27    WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> sunucuOzellestir() {
28        return factory -> {
29            factory.setContextPath("/app");   // tüm uçlar artık /app altında
30        };
31    }
32
33    @RestController
34    static class BilgiController {
35        @Value("${server.port:8080}") String port;
36        @GetMapping("/bilgi")
37        Map<String, Object> bilgi() {
38            return Map.of("mesaj", "gömülü Tomcat çalışıyor", "port", port, "contextPath", "/app");
39        }
40    }
41
42    @Bean
43    CommandLineRunner selfTest() {
44        return args -> {
45            // Context-path /app olduğu için uçlar http://localhost:8080/app/... altında.
46            RestClient c = RestClient.create("http://localhost:8080/app");
47            System.out.println("\n========= GÖMÜLÜ SUNUCU SELF-TEST =========");
48            System.out.println("GET /app/bilgi -> " + c.get().uri("/bilgi").retrieve().body(String.class));
49            System.out.println("(Sunucu context-path '/app' altında; port 8080.)");
50            System.out.println("===========================================");
51        };
52    }
53}
canlı çalıştırma için ortam gerekir

Bu örnek Spring / Spring Boot (Gradle) ortamı gerektirir; tek dosya olarak java Ornek1.java ile çalışmaz. Orijinal portal bunu gömülü Tomcat / Spring context ile koşuyordu. Beklenen davranış yukarıdaki anlatım ve kodda açıklanmıştır.