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/appyapar 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ırma | java -jar app.jar | Bir Tomcat'e .war dağıt |
| Sunucu | Uygulamanın içinde | Ayrı kurulu |
| Modern tercih | Evet (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 gerekir1// 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}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.