Her geliştirici modern teknolojilerle çalışmayı ve güncel kalmayı hayal eder. Aslında, eski, modası geçmiş ve genellikle etkisiz ve hatta ölü doğmuş teknolojiler etrafında güçlü bir işe alım stratejisi oluşturmak neredeyse imkansızdır.
Ancak hayat karmaşıktır ve her şey her zaman bizim isteklerimize bağlı değildir.
Size terfi teklif edilebilir ve teknolojilerin yıllardır değişmediği veya güncellenmediği bir projeye transfer edilebilirsiniz. Ya da, şu anda mevcut teknoloji yığınının sizi özellikle ilgilendirmediği hayalinizdeki şirkette bir işe girebilirsiniz. Belki de üniversiteden yeni mezun oldunuz ve ilk iş deneyiminizi kazanmak için can atıyorsunuz veya belki de önceki işinizden çıkarıldınız ve finansal zorluktan kaçınmak için hemen bir şeyler bulmanız gerekiyor.
Bir de şu senaryo var: Mülakat sırasında, mevcut yığınla çalışmaya başlayacağınız ancak gelecekte değişiklikler yapmak için bolca fırsatınız olacağı söyleniyor - belki, muhtemelen, ama...
Ama dürüst olalım, bunların hepsi sadece felsefe. Katılıyorum ve zorlu kariyer yolunuzda karşılaşabileceğiniz gerçek bir vakayı analiz etmemizi öneriyorum.
JVM yığınının tüm hayranları, özellikle Spring Framework'ü sevenler için, lütfen okumaya devam edin.
BTW, bağımsız olarak çalışabiliyorken bir Spring Boot uygulamasını bir uygulama sunucusuna dağıtmanız neden gereksin ki? Sonuçta, bu Spring Boot'un öne çıkan özelliklerinden biridir.
Ve bunun birkaç nedeni olabilir:
Java 8, 18 Mart 2014'te yayımlandı ve bugün bile kullandığımız önemli özellikleri beraberinde getirdi.
Örnekler için çok uzağa gitmeme gerek yok, işte birkaçı:
Lambda İfadeleri
Akış API'si
İsteğe bağlı sınıf
java.time Paketi (Tarih ve Saat API'si)
vb vb
O tarihten bu güne kadar üç LTS sürümü yayınlandı ( 19/08/2024 ):
New Relic tarafından yürütülen bir araştırmaya göre, Java 8 hala mevcut projelerin %28,8'inde kullanılıyor ve kabul edeceğiniz gibi bu önemsiz bir oran değil. Payı her geçen yıl giderek azalsa da, bu teknolojiyi tamamen reddetmek için henüz çok erken.
Eclipse GlassFish'e özel Project Eclipse web sitesine göre:
Eclipse GlassFish®, Jakarta EE spesifikasyonunu uygulayan eksiksiz bir uygulama sunucusudur. GlassFish, tüm gerekli ve isteğe bağlı Jakarta EE API'lerinin uygulamalarını içerir ve tüm Jakarta EE TCK'lerini geçer. GlassFish ayrıca eksiksiz bir yönetim konsolu, kümeleme desteği ve diğer geliştirici ve üretim odaklı araçlar ve özellikler içerir.
Maalesef, bu web sitesinden 5.1.0'dan daha düşük bir sürümü indirmek mümkün değil, ancak beşinci sürümün altındaki sürümü kullanmaya karar verdiğimizden, bu ürünün birkaç önceki sürümünü İndirmeler bölümünde bulabileceğiniz Oracle web sitesine gitmemiz gerekecek. Ancak lisansa dikkat edin ve bu klasörden sandbox'ınızın dışında hiçbir şey kullanmayın.
Dağıtım dosyasını makinenizin herhangi bir yerine yerleştirin, bin
klasörüne gidin ve aşağıdaki komutu çalıştırın:
./asadmin start-domain --verbose
Bir süre bekleyin ve http://localhost:4848/ adresini açmayı deneyin, Yönetici Konsolu varsayılan olarak kullanılabilir olmalı ve herhangi bir kimlik bilgisi istememelidir. Sol panelde Uygulamalar sekmesini bulacaksınız, üzerine tıklarsanız uygulamaları dağıtabileceğiniz, dağıtımı kaldırabileceğiniz, etkinleştirebileceğiniz ve devre dışı bırakabileceğiniz bir menüye erişebileceksiniz.
Uygulamanızı GlassFish'te dağıtmak için şu anda bilmeniz gereken her şey bu kadar.
Web geliştirme dünyasında bu popüler framework'ü en azından bir kere duymamış birini bulmak muhtemelen oldukça zordur.
Spring Boot 2, 2021 yılında piyasaya sürüldü ve sürüm 3'ün minimum Java 17 sürümünü gerektirmesinin aksine, minimum Java 8 sürümünü gerektiriyor.
En son özellikleri, güvenlik yamalarını ve bazı optimizasyonları kullanabilmek için Java 8'i destekleyen son sürümü bulmamız gerekiyor.
Ve işte karşınızda, 2.7.18, bloglarına göre, 2.7.18 Spring Boot 2.x'i ve buna bağlı olarak Java 8 ve Java 11'i destekleyen en son sürüm oldu:
5,5 yıl ve 121 sürümün ardından 2.7.18, Spring Boot 2.x için açık kaynak desteğinin sonunu işaret ediyor. Lütfen en kısa sürede Spring Boot 3'e yükseltin. Henüz yükseltmeye hazır değilseniz, Spring Boot 2.7.x için ticari destek mevcuttur .
Spring Boot Topluluğu, Spring Boot Uygulamasının EE ortamında nasıl çalıştırılacağına dair öneriler sunar + Resmi Belgeler
Uygulamayı derlemek ve çalıştırmak için gereken minimum ve yeterli pom.xml aşağıdaki gibi olacaktır:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> </parent> <groupId>io.github.isharipov</groupId> <artifactId>sb2-to-gf4</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Burada iki şeye dikkat etmeniz gerekiyor:
Uygulamayı bir savaş dosyası olarak paketliyorum, böylece uygulama sunucusuna bir web uygulaması dağıttığımı açıkça gösterebiliyorum
<packaging>war</packaging>
Yerleşik Tomcat'ı hariç tutuyorum, spring-boot-starter-tomcat bağımlılığını ekliyorum, iki dahili bağımlılığı hariç tutuyorum ve sağlanan kapsamı ekliyorum
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> <scope>provided</scope> </dependency>
Bu yaklaşım, Tomcat'i eklemenize ve yalnızca Spring Boot çalışma zamanı için kullanılabilir hale getirmenize olanak tanır ve böylece uygulamayı uygulama sunucusundan bağımsız olarak çalıştırabilirsiniz. Bu ayrım önemlidir. Spring, bu bağımlılığı, ortaya çıkan yapıtın içinde lib-provided adlı ayrı bir klasöre yerleştirir. Artık ortaya çıkan yapıtı çalıştırmak için en az üç seçeneğiniz var:
domain-dir/autodeploy
altındaki autodeploy dizinine kopyalayınasadmin
API - komutu dağıtjava -jar
kullanarak çalıştırın: spring-boot-maven-plugin iki eser oluşturur - war
ve war.original
. Basit war
lib-provided
içerir, original
olanı içermez.Aşağıdaki bağımlılıkları hariç tutmak, ortaya çıkan yapıt boyutunu azaltmamızı sağlar:
<exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion>
Bir Spring Boot uygulamasını bir uygulama sunucusunda çalıştırmak için ana uygulama sınıfında iki değişiklik yapmanız gerekir.
Genellikle, basit bir web uygulaması kurmak için, main
metodu olan bir public sınıf oluşturur ve bunu @SpringBootApplication notasyonuyla notlandırırsınız.
@SpringBootApplication public class Application { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Yani yukarıda da belirttiğim gibi iki değişiklik:
@SpringBootApplication public class Application extends SpringBootServletInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { LOGGER.debug("From main"); SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { LOGGER.debug("From configure"); return application.sources(Application.class); } }
Ve son olarak, Dağıtım Tanımlayıcısını eklemeniz gerekir
Yani, ana → src → webapp → WEB-INF klasörünün altına şu dosyayı koymanız gerekiyor - glassfish-web.xml :
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app> <class-loader delegate="false"/> <session-config> <session-manager/> </session-config> <jsp-config/> </glassfish-web-app>
Dağıtım Tanımlayıcısı hakkında daha fazla bilgi edinin
Sınıf Yükleyici Delegasyonu hakkında daha fazla bilgi edinin