すべての開発者は、最新のテクノロジーを駆使して最新の状態を維持することを夢見ています。実際、時代遅れで、時代遅れで、多くの場合効果がなく、未だに生まれていないテクノロジーを中心に強力な採用戦略を構築することはほぼ不可能です。
しかし、人生は複雑であり、すべてが必ずしも私たちの欲望によって決まるわけではありません。
昇進のオファーを受けて、何年もテクノロジーが変わっていない、または更新されていないプロジェクトに異動になるかもしれません。あるいは、現在のテクノロジー スタックに特に興味がない、夢の会社に就職するかもしれません。大学を卒業したばかりで、初めての仕事の経験を積みたいと思っているかもしれませんし、前の仕事を解雇され、経済的困難を避けるためにすぐに新しい仕事を見つける必要があるかもしれません。
別のシナリオもあります。面接中に、現在のスタックで作業を開始するが、将来的には変更する機会が十分にあると言われます。おそらく、可能性はありますが...
しかし、正直に言うと、これはすべて単なる哲学です。私も同意します。そこで、皆さんが挑戦的なキャリアパスで遭遇する可能性のある実際のケースを分析することを提案します。
JVM スタックのすべてのファン、特に Spring Framework を愛するファンの皆さん、ぜひお読みください。
ところで、 Spring Bootアプリケーションは独立して実行できるのに、なぜアプリケーション サーバーにデプロイする必要があるのでしょうか? 結局のところ、それが Spring Boot の優れた機能の 1 つです。
これにはいくつかの理由が考えられます:
Java 8 は 2014 年 3 月 18 日にリリースされ、今日まで使用されている画期的な機能をもたらしました。
例は多くありませんが、いくつか挙げると次のようになります。
ラムダ式
ストリームAPI
オプションクラス
java.time パッケージ (日付と時刻 API)
などなど
それ以来、現在( 2024 年 8 月 19 日)までに3 つの LTS バージョンがリリースされています。
New Relic が実施した調査によると、Java 8 は現在のプロジェクトの 28.8% で依然として使用されており、これは決して小さな数字ではないことはご承知のとおりです。そのシェアは年々徐々に減少していますが、このテクノロジーを完全に否定するのは時期尚早です。
Eclipse GlassFish 専用の Project Eclipse Web サイトによると、次のようになります。
Eclipse GlassFish® は、Jakarta EE 仕様を実装する完全なアプリケーション サーバーです。GlassFish には、すべての必須およびオプションの Jakarta EE API の実装が含まれており、すべての Jakarta EE TCK に合格しています。GlassFish には、完全な管理コンソール、クラスタリング サポート、その他の開発者および本番環境向けのツールと機能も含まれています。
残念ながら、この Web サイトから 5.1.0 より前のバージョンをダウンロードすることはできませんが、5 より前のバージョンを使用することにしたため、 Oracle Web サイトにアクセスする必要があります。この Web サイトのダウンロード セクションで、この製品の以前のバージョンをいくつか見つけることができます。ただし、ライセンスには注意し、このフォルダーの内容をサンドボックスの外部で使用しないでください。
配布ファイルをマシン上のどこかに置き、 bin
フォルダーに移動して、次のコマンドを実行するだけです。
./asadmin start-domain --verbose
しばらく待ってから、 http://localhost:4848/を開いてみてください。管理コンソールはデフォルトで利用可能で、いかなる種類の資格情報も求められないはずです。左側のパネルに [アプリケーション] タブがあります。これをクリックすると、アプリケーションのデプロイ、デプロイ解除、有効化、無効化を行うことができるメニューにアクセスできます。
現時点で、アプリケーションを GlassFish にデプロイするために GlassFish について知っておく必要があるのはこれだけです。
ウェブ開発の世界で、この人気のあるフレームワークについて一度も聞いたことがない人を見つけるのは、おそらくかなり難しいでしょう。
Spring Boot 2 は 2021 年にリリースされ、最小バージョンとしてJava 17 を必要とするバージョン 3 とは異なり、最小バージョンとしてJava 8 を必要とします。
最新の機能、セキュリティ パッチ、および一部の最適化を使用するには、Java 8 をサポートする最新バージョンを見つける必要があります。
そして、これが 2.7.18 です。彼らのブログによると、2.7.18 は Spring Boot 2.x とそれに応じた Java 8 および Java 11 をサポートする最新バージョンになりました。
5 年半と 121 回のリリースを経て、2.7.18 で Spring Boot 2.x のオープン ソース サポートは終了します。できるだけ早く Spring Boot 3 にアップグレードしてください。まだアップグレードの準備ができていない場合は、Spring Boot 2.7.x の商用サポートをご利用いただけます。
Spring Boot コミュニティは、EE 環境で Spring Boot アプリケーションを実行する方法に関する推奨事項と公式ドキュメントを提供しています。
アプリケーションをビルドして実行するための最小限かつ十分なpom.xml は次のようになります。
<?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>
ここでは、次の 2 つの点に注意する必要があります。
アプリケーションをwarファイルとしてパッケージ化して、Webアプリケーションをデプロイしていることをアプリケーションサーバーに明確にします。
<packaging>war</packaging>
組み込みTomcatを除外し、spring-boot-starter-tomcat依存関係を追加し、2つの内部依存関係を除外し、提供されたスコープを追加しています。
<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>
このアプローチにより、Tomcat を組み込み、Spring Boot ランタイムでのみ使用できるようにして、アプリケーションをアプリケーション サーバーから独立して実行できるようになります。この分離は重要です。Spring は、この依存関係を、結果の成果物内のlib-providedという別のフォルダーに配置します。結果の成果物を実行するには、少なくとも 3 つのオプションがあります。
domain-dir/autodeploy
の下のautodeployディレクトリにコピーします。asadmin
API -デプロイコマンドjava -jar
を使用して実行します。spring -boot-maven-plugin は、 war
とwar.original
の 2 つの成果物を作成します。単純なwar
にはlib-provided
が含まれますが、 original
ものには含まれません。次の依存関係を除外すると、結果として得られる成果物のサイズを削減できます。
<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>
アプリケーション サーバー上で Spring Boot アプリケーションを実行するには、メイン アプリケーション クラスに 2 つの変更を加える必要があります。
通常、単純な Web アプリケーションをセットアップするには、 main
メソッドを持つパブリック クラスを作成し、 @SpringBootApplicationアノテーションを付けます。
@SpringBootApplication public class Application { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
したがって、上で述べたように、2 つの修正があります。
@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); } }
最後に、デプロイメント記述子を追加する必要があります。
したがって、main → src → webapp → WEB-INF フォルダーの下に、次のファイル - 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>
デプロイメント記述子の詳細を読む
クラスローダー委任の詳細を読む