否認、怒り、交渉、憂鬱… すべての開発者は、最新のテクノロジーを駆使して最新の状態を維持することを夢見ています。実際、時代遅れで、時代遅れで、多くの場合効果がなく、未だに生まれていないテクノロジーを中心に強力な採用戦略を構築することはほぼ不可能です。 しかし、人生は複雑であり、すべてが必ずしも私たちの欲望によって決まるわけではありません。 昇進のオファーを受けて、何年もテクノロジーが変わっていない、または更新されていないプロジェクトに異動になるかもしれません。あるいは、現在のテクノロジー スタックに特に興味がない、夢の会社に就職するかもしれません。大学を卒業したばかりで、初めての仕事の経験を積みたいと思っているかもしれませんし、前の仕事を解雇され、経済的困難を避けるためにすぐに新しい仕事を見つける必要があるかもしれません。 別のシナリオもあります。面接中に、現在のスタックで作業を開始するが、将来的には変更する機会が十分にあると言われます。おそらく、可能性はありますが... 承認… しかし、正直に言うと、これはすべて単なる哲学です。私も同意します。そこで、皆さんが挑戦的なキャリアパスで遭遇する可能性のある実際のケースを分析することを提案します。 JVM スタックのすべてのファン、特に Spring Framework を愛するファンの皆さん、ぜひお読みください。 ところで、 アプリケーションは独立して実行できるのに、なぜアプリケーション サーバーにデプロイする必要があるのでしょうか? 結局のところ、それが Spring Boot の優れた機能の 1 つです。 Spring Boot これにはいくつかの理由が考えられます: GlassFish または別の EE アプリケーション サーバーにアプリケーションをデプロイするためのインフラストラクチャがすでに設定されている場合があります。この場合、EE アプリケーション サーバーはインストールされ、構成され、完全にサポートされています。Spring Boot の場合のようにアプリケーションが独立して実行できる場合でも、デプロイと実行のためのインフラストラクチャを準備して維持する必要があります。 しばらくすると、アプリケーションサーバーを放棄し始め、現在の環境で使用できる可能性のある将来使用するテクノロジを事前に使用し始めることがわかります。 チーム内のさまざまな経験と専門知識 実験と仮説検証 Java 8 Java 8 は 2014 年 3 月 18 日にリリースされ、今日まで使用されている をもたらしました。 画期的な機能 例は多くありませんが、いくつか挙げると次のようになります。 ラムダ式 ストリームAPI オプションクラス java.time パッケージ (日付と時刻 API) などなど それ以来、現在( )までに がリリースされています。 2024 年 8 月 19 日 3 つの LTS バージョン Java SE 11(55) - 2018年9月25日 Java SE 17(61) - 2021年9月14日 Java SE 21(65) - 2023 年 9 月 19 日 によると、Java 8 は現在のプロジェクトの 28.8% で依然として使用されており、これは決して小さな数字ではないことはご承知のとおりです。そのシェアは年々徐々に減少していますが、このテクノロジーを完全に否定するのは時期尚早です。 New Relic が実施した調査 グラスフィッシュ4.1.2 によると、次のようになります。 Eclipse GlassFish 専用の Project Eclipse Web サイト Eclipse GlassFish® は、Jakarta EE 仕様を実装する完全なアプリケーション サーバーです。GlassFish には、すべての必須およびオプションの Jakarta EE API の実装が含まれており、すべての Jakarta EE TCK に合格しています。GlassFish には、完全な管理コンソール、クラスタリング サポート、その他の開発者および本番環境向けのツールと機能も含まれています。 残念ながら、この Web サイトから 5.1.0 より前のバージョンをダウンロードすることはできませんが、5 より前のバージョンを使用することにしたため、 にアクセスする必要があります。この Web サイトのダウンロード セクションで、この製品の以前のバージョンをいくつか見つけることができます。ただし、ライセンスには注意し、このフォルダーの内容をサンドボックスの外部で使用しないでください。 Oracle Web サイト 配布ファイルをマシン上のどこかに置き、 フォルダーに移動して、次のコマンドを実行するだけです。 bin ./asadmin start-domain --verbose しばらく待ってから、 を開いてみてください。管理コンソールはデフォルトで利用可能で、いかなる種類の資格情報も求められないはずです。左側のパネルに [アプリケーション] タブがあります。これをクリックすると、アプリケーションのデプロイ、デプロイ解除、有効化、無効化を行うことができるメニューにアクセスできます。 http://localhost:4848/ 現時点で、アプリケーションを GlassFish にデプロイするために GlassFish について知っておく必要があるのはこれだけです。 スプリングブート2 ウェブ開発の世界で、この人気のあるフレームワークについて一度も聞いたことがない人を見つけるのは、おそらくかなり難しいでしょう。 、最小バージョンとして Java 8 を必要とします。 Spring Boot 2 は 2021 年にリリースされ Java 17 を必要とするバージョン 3 とは異なり、最小バージョンとして 最新の機能、セキュリティ パッチ、および一部の最適化を使用するには、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 の商用サポートを 。 ご利用いただけます 一緒に使い始める 前提条件: Java 8 グラスフィッシュ4.1.2 スプリングブート 2.7.18 メイヴン Spring Boot コミュニティは、EE 環境で Spring Boot アプリケーションを実行する方法に関する と を提供しています。 推奨事項 公式ドキュメント xml ファイルの アプリケーションをビルドして実行するための最小限かつ十分な 次のようになります。 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 は、この依存関係を、結果の成果物内の という別のフォルダーに配置します。結果の成果物を実行するには、少なくとも 3 つのオプションがあります。 lib-provided GlassFish へのデプロイ - 基本的に、 。 アプリケーションをデプロイする方法は 3 つあります GlassFish 管理 GUI アーカイブファイルを の下のautodeployディレクトリにコピーします。 domain-dir/autodeploy API - コマンド asadmin デプロイ を使用して実行します。spring 、 と の 2 つの成果物を作成します。単純な には が含まれますが、 ものには含まれません。 java -jar -boot-maven-plugin は war war.original war lib-provided original お気に入りのIDEでアプリケーションを起動します。IntelliJ IDEA Community Editionの場合は、実行/デバッグ構成の下に次のオプションを追加する必要があります。 次の依存関係を除外すると、結果として得られる成果物のサイズを削減できます。 <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 つの修正があります。 からApplicationクラスを継承する SpringBootServletInitializer メソッドをオーバーライドします。 保護された SpringApplicationBuilder configure(SpringApplicationBuilder builder) @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> の詳細を読む デプロイメント記述子 の詳細を読む クラスローダー委任 まとめ 古い技術を使うことを恐れない 好奇心を持ち続け、スキルを磨き続けましょう 幸運を GitHub リンクトイン