Jeder Entwickler träumt davon, mit modernen Technologien zu arbeiten und auf dem neuesten Stand zu bleiben. Tatsächlich ist es fast unmöglich, eine starke Einstellungsstrategie rund um veraltete, überholte und oft ineffektive und sogar totgeborene Technologien aufzubauen.
Allerdings ist das Leben komplex und nicht immer hängt alles von unseren Wünschen ab.
Möglicherweise wird Ihnen eine Beförderung angeboten und Sie werden in ein Projekt versetzt, bei dem sich die Technologien seit Jahren nicht geändert oder aktualisiert haben. Oder Sie landen einen Job bei Ihrem Traumunternehmen, dessen aktuelle Technologie Sie derzeit nicht besonders interessiert. Vielleicht haben Sie gerade Ihr Studium abgeschlossen und möchten unbedingt Ihre ersten Berufserfahrungen sammeln, oder Sie wurden von Ihrem vorherigen Job entlassen und müssen schnell etwas Neues finden, um finanzielle Schwierigkeiten zu vermeiden.
Es gibt auch ein anderes Szenario: Während des Vorstellungsgesprächs wird Ihnen gesagt, dass Sie zunächst mit dem aktuellen Stack arbeiten, in Zukunft aber reichlich Gelegenheit für Änderungen haben werden – vielleicht, möglicherweise, aber …
Aber seien wir ehrlich, das ist alles nur Philosophie. Ich stimme zu und schlage vor, wir analysieren einen realen Fall, der Ihnen auf Ihrem anspruchsvollen Karriereweg begegnen könnte.
Dies ist für alle Fans des JVM-Stacks, insbesondere für diejenigen, die das Spring Framework lieben. Lesen Sie bitte weiter.
Übrigens, warum sollten Sie eine Spring Boot -Anwendung überhaupt auf einem Anwendungsserver bereitstellen, wenn sie unabhängig ausgeführt werden kann? Schließlich ist das eine der herausragenden Funktionen von Spring Boot.
Dafür kann es mehrere Gründe geben:
Java 8 wurde am 18. März 2014 veröffentlicht und brachte Meilensteinfunktionen , die wir bis heute nutzen.
Ich muss nicht weit gehen, um Beispiele zu finden. Hier sind nur einige davon:
Lambda-Ausdrücke
Stream-API
Optionale Klasse
Das java.time-Paket (Datums- und Uhrzeit-API)
usw. usw.
Seitdem wurden bis heute ( 19.08.2024 ) drei LTS-Versionen veröffentlicht:
Laut einer Studie von New Relic wird Java 8 immer noch in 28,8 % der aktuellen Projekte verwendet, was, wie Sie sicherlich zustimmen werden, nicht unerheblich ist. Obwohl sein Anteil von Jahr zu Jahr allmählich abnimmt, ist es sicherlich zu früh, diese Technologie völlig abzutun.
Laut der Eclipse GlassFish gewidmeten Project Eclipse-Website :
Eclipse GlassFish® ist ein vollständiger Anwendungsserver, der die Jakarta EE-Spezifikation implementiert. GlassFish enthält Implementierungen aller erforderlichen und optionalen Jakarta EE-APIs und erfüllt alle Jakarta EE TCKs. GlassFish enthält außerdem eine vollständige Administrationskonsole, Clustering-Unterstützung und andere auf Entwickler und Produktion ausgerichtete Tools und Funktionen.
Leider ist es nicht möglich, von dieser Website Versionen unter 5.1.0 herunterzuladen. Da wir uns jedoch für die Version unter 5.1.0 entschieden haben, müssen wir auf die Oracle-Website gehen, wo Sie im Downloadbereich mehrere frühere Versionen dieses Produkts finden. Seien Sie jedoch vorsichtig mit der Lizenz und verwenden Sie nichts aus diesem Ordner außerhalb Ihrer Sandbox.
Legen Sie die Verteilungsdatei einfach irgendwo auf Ihrem Computer ab, navigieren Sie zum bin
Ordner und führen Sie den folgenden Befehl aus:
./asadmin start-domain --verbose
Warten Sie einen Moment und versuchen Sie , http://localhost:4848/ zu öffnen. Die Admin-Konsole sollte standardmäßig verfügbar sein und keine Anmeldeinformationen anfordern. Im linken Bereich finden Sie die Registerkarte „Anwendungen“. Wenn Sie darauf klicken, erhalten Sie Zugriff auf ein Menü, mit dem Sie Anwendungen bereitstellen, deinstallieren, aktivieren und deaktivieren können.
Das ist im Moment alles, was Sie über GlassFish wissen müssen, um zu versuchen, Ihre Anwendung dort bereitzustellen.
Es ist wahrscheinlich ziemlich schwierig, in der Welt der Webentwicklung jemanden zu finden, der nicht mindestens einmal von diesem beliebten Framework gehört hat.
Spring Boot 2 wurde im Jahr 2021 veröffentlicht und erfordert mindestens Java 8, im Gegensatz zu Version 3, die mindestens Java 17 erfordert .
Um die neuesten Funktionen, Sicherheitspatches und einige Optimierungen nutzen zu können, müssen wir die neueste Version finden, die Java 8 unterstützt.
Und hier ist sie, 2.7.18. Laut ihrem Blog ist 2.7.18 die neueste Version, die Spring Boot 2.x und dementsprechend Java 8 und Java 11 unterstützt:
Nach 5,5 Jahren und 121 Releases markiert 2.7.18 das Ende des Open-Source-Supports für Spring Boot 2.x. Bitte aktualisieren Sie so bald wie möglich auf Spring Boot 3. Wenn Sie noch nicht zum Aktualisieren bereit sind, steht Ihnen kommerzieller Support für Spring Boot 2.7.x zur Verfügung .
Die Spring Boot Community bietet Empfehlungen zum Ausführen der Spring Boot-Anwendung in der EE-Umgebung + offizielle Dokumentation
Die minimale und ausreichende pom.xml zum Erstellen und Ausführen der Anwendung sieht wie folgt aus:
<?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>
Dabei musst Du auf zwei Dinge achten:
Ich verpacke die Anwendung als War-Datei, um dem Anwendungsserver klar zu machen, dass ich eine Webanwendung bereitstelle
<packaging>war</packaging>
Ich schließe eingebetteten Tomcat aus, füge die Abhängigkeit spring-boot-starter-tomcat hinzu, schließe zwei interne Abhängigkeiten aus und füge den bereitgestellten Umfang hinzu
<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>
Mit diesem Ansatz können Sie Tomcat einbinden und nur für die Spring Boot-Laufzeit verfügbar machen, sodass Sie die Anwendung unabhängig vom Anwendungsserver ausführen können. Diese Trennung ist wichtig. Spring platziert diese Abhängigkeit in einem separaten Ordner namens lib-provided innerhalb des resultierenden Artefakts. Sie haben jetzt mindestens drei Optionen zum Ausführen des resultierenden Artefakts:
domain-dir/autodeploy
asadmin
API - Bereitstellungsbefehljava -jar
: spring-boot-maven-plugin erstellt zwei Artefakte - war
und war.original
. Das einfache war
enthält lib-provided
, das original
nicht.Durch den Ausschluss der folgenden Abhängigkeiten können wir die resultierende Artefaktgröße reduzieren:
<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>
Um eine Spring Boot-Anwendung auf einem Anwendungsserver auszuführen, müssen Sie zwei Änderungen an der Hauptanwendungsklasse vornehmen.
Normalerweise würden Sie zum Einrichten einer einfachen Webanwendung eine öffentliche Klasse mit einer main
erstellen und sie mit der Annotation „@SpringBootApplication“ versehen.
@SpringBootApplication public class Application { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Daher, wie oben erwähnt, zwei Änderungsanträge:
@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); } }
Und zu guter Letzt müssen Sie Deployment Descriptor hinzufügen
Sie müssen also im Ordner main → src → webapp → WEB-INF die folgende Datei ablegen – 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>
Lesen Sie mehr über Deployment Descriptor
Lesen Sie mehr über Class Loader Delegation