Boot Spring 3.2.0から始める: NoSQL統合付きHello World REST APIの構築

最新のSpring Boot開発の進化について、バージョン3.2.0を使って「Hello World」アプリケーションを作成する旅に乗り出しましょう。このチュートリアルでは、Springへの一般的な紹介を超えて、REST APIを構築する詳細について説明し、NoSQLデータベースとのスムーズな統合を行います。Spring Boot 3.2.0は、新機能と最適化の数々を備えており、現代の開発手法の魅力的な探求の舞台を築き上げています。このガイドは初心者から経験豊富な開発者まで対象としており、Springの可能性を活かした堅牢で現代的なアプリケーションを構築するための実践的な経験を提供します。Spring 3.2.0の旅を始めましょう。ここではシンプルさが革新と出会います。

Spring Boot 3.2.0の新機能

Spring Boot 3.2.0はJava開発における大きな飛躍を表しており、最小Java 17の環境を要求し、最先端のJava 21をサポートしています。このバージョンは、Springフレームワークの使用方法を再定義する多くの機能を導入しています。

Javaの目を引く特徴の一つは、軽量なスレッドを利用することでスケーラビリティと応答性を向上させる仮想スレッドのサポートです。さらに、Spring Boot 3.2.0は、JVMチェックポイントリストア(Project CRaC)の初期サポートを導入し、JVM再起動後のアプリケーションの状態復元を可能にして、信頼性と回復力を強化します。

セキュリティはSSLバンドルリローディングとともに注目され、SSLバンドルの動的なリローディングを可能にします。この機能により、開発者はSSL証明書をより動的に管理でき、アプリケーションの迅速性とセキュリティを確保します。

オブザベリビリティの向上はリリース全体に織り込まれ、開発者により透明で管理しやすい開発体験のための高度な監視とトレース機能を提供します。

現代の開発実践に沿って、Spring Boot 3.2.0はRESTful(RestClient)およびJDBC(JdbcClient)操作のための専用クライアントを導入します。これらの追加により、外部サービスとの通信が合理化され、統合能力が強化されます。

また、Jetty 12との互換性も注目すべき追加で、開発者はJettyウェブサーバの最新機能を活用できます。Spring Boot 3.2.0は、Apache Pulsarとの互換性をサポートすることでエコシステムの互換性を拡大し、Springのメッセージング機能を広げて、堅牢なイベント駆動型アプリケーションの構築を可能にします。

KafkaとRabbitMQの普及を受けて、Spring Boot 3.2.0はこれらの人気メッセージングシステム向けにSSLバンドルサポートを導入し、これらのメッセージブローカーに依存するアプリケーションのセキュリティ体制を強化します。

また、リリースではネストされたJARの扱いに関する依存関係管理の複雑さに対処し、より信頼性と予測可能性の高いアプリケーションのデプロイを保証する新しいアプローチを採用しています。最後に、Dockerイメージビルドは改善され、コンテナ化プロセスがスムーズになり、Springアプリケーションの移植性とデプロイ効率が向上します。

結論として、Spring Boot 3.2.0は最新のJavaバージョンに対応し、画期的な機能を導入し、既存の機能を洗練させています。このリリースにより、開発者はJava開発の絶え間ない進化の中で、現代の堅牢で高性能なアプリケーションを自信を持って構築できるようになります。

コードを見せてください

このセッションでは、Springの力を活用し、HarperDBとスムーズに統合するPokemon APIの開発に取り組みます。基本的なCRUD(作成、読み取り、更新、削除)操作の実装に重点を置き、各Pokemonの固有の識別子(ID)を活用することに特に焦点を当てます。このセッションの終わりまでに、完全に機能するSpringアプリケーションと、拡張や大規模なプロジェクトへの統合が可能なPokemon APIを手に入れることができます。シンプルさと革新が出会うPokemonとSpring開発の世界に飛び込みましょう。

NoSQLデータベースであるHarperDBをDockerを使って稼働状態にしてください。ターミナルを開き、以下のコマンドを実行してください。

Shell

 

docker run -d -e HDB_ADMIN_USERNAME=root -e HDB_ADMIN_PASSWORD=password -e HTTP_THREADS=4 -p 9925:9925 -p 9926:9926 harperdb/harperdb

このコマンドは、HarperDBのDockerイメージをプルし、指定された構成でコンテナを起動します。-pオプションは、コンテナのポートをローカルマシンにマッピングし、HarperDBインターフェースをhttp://localhost:9925でアクセス可能にします。

次に、Spring InitializerにアクセスしてSpringアプリケーションを設定しましょう。以下の手順に従ってください:

  1. 好みのプロジェクト設定を選択します(例:MavenまたはGradle、Javaのバージョン)。
  2. 依存関係を追加:依存関係リストから「Spring Web」を選択します。
  3. Generate」をクリックして、プロジェクトをZIPファイルとしてダウンロードします。

ダウンロードしたZIPファイルを解凍し、IntelliJ IDEAやEclipseなどの好みの統合開発環境(IDE)にプロジェクトをインポートします。

Springアプリケーションの設定が完了したので、次の重要なステップはHarperDBとの統合です。これを実現するために、プロジェクトにHarperDBの依存関係を含める必要があります。pom.xmlファイルに次のMaven依存関係を追加してください:

XML

 

<dependency>
    <groupId>io.harperdb</groupId>
    <artifactId>harpderdb-core</artifactId>
    <version>0.0.1</version>
</dependency>

依存関係が設定されたので、コードに進みましょう。Springで構成クラスHarperDBを作成し、接続を管理し、Springの逆転コントロール(IoC)コンテナの不可欠な部分にします。

Java

 

@Configuration
public class HarperDB {

    @Bean
    public Template template() {
        Server server = ServerBuilder.of("http://localhost:9925")
                .withCredentials("root", "password");
        server.createDatabase("pokemons");
        server.createTable("pokemon").id("id").database("pokemons");
        return server.template("pokemons");
    }
}

この設定クラスは、@Configurationでアノテーション付けされ、”template”という名前のSpring beanを作成します。Templateオブジェクトは、HarperDBとのインタラクションのための主要なコンポーネントです。サーバーのURLやログイン資格情報など、サーバー接続の詳細で初期化します。さらに、“pokemons”という名前のデータベースと、“id”カラムを持つ“pokemon”という名前のテーブルを作成します。これにより、HarperDBにPokemonエンティティを保存する準備が整います。

デモを強化するために、最初にJavaのrecord機能を使用して不変のエンティティを作成します。

Java

 

public record Pokemon(String id, String name, String location) {
}

このシンプルなPokemonレコードクラスは、Pokemonの基本的な属性—そのID、名前、場所—を不変の形でカプセル化します。

次に、データベースとの通信を確立するために、HarperDBへのブリッジとしてPokemonServiceを作成します。

Java

 

@Service
public class PokemonService {

    private final Template template;

    public PokemonService(Template template) {
        this.template = template;
    }

    public Optional<Pokemon> findById(String id) {
        return template.findById(Pokemon.class, id);
    }

    public void save(Pokemon pokemon) {
        template.upsert(pokemon);
    }

    public void delete(String id) {
        template.delete(Pokemon.class, id);
    }
}

PokemonServiceクラスは、Pokemonエンティティに関連する基本的な操作を処理するSpringサービスです。これは、以前に設定したTemplateオブジェクトを使用してHarperDBと対話します。findByIdメソッドは、PokemonのIDによってPokemonを取得し、Pokemonを追加または更新し、データベースから削除します。

最後に、これらの操作をRESTエンドポイントとして公開するPokemonControllerを作成します。

Java

@RestController
public class PokemonController {

    private final PokemonService service;

    public PokemonController(PokemonService service) {
        this.service = service;
    }

    @GetMapping("/pokemons/{id}")
    Pokemon findById(@PathVariable String id) {
        return service.findById(id).orElseThrow(() -> new PokemonNotFoundException(id));
    }

    @PutMapping("/pokemons")
    Pokemon newPokemon(@RequestBody Pokemon pokemon) {
        service.save(pokemon);
        return pokemon;
    }

    @DeleteMapping("/pokemons/{id}")
    void deleteEmployee(@PathVariable String id) {
        service.delete(id);
    }
}

このPokemonControllerクラスは、@RestControllerでアノテーション付けされ、3つのエンドポイントを定義します。

  • GET /pokemons/{id}は、PokemonのIDによってPokemonを取得します。
  • PUT /pokemonsは、新しいPokemonを作成するか、既存のものを更新します。
  • DELETE /pokemons/{id}は、PokemonのIDによってPokemonを削除します。

コントローラは、これらの操作を処理するためにPokemonServiceに依存しており、Springアプリケーション内での懸念事項の明確な分離を提供します。

これらのコンポーネントが配置されることで、私たちのPokemon APIはHarperDBを使用して基本的なCRUD操作を実行できます。エンドポイントをテストして、SpringとNoSQLデータベースのスムーズな統合を体験してください!

HarperDBと統合され、Pokemon APIを搭載したあなたのSpringアプリケーションは、テストと実行の準備が整いました。curlコマンドを使用していくつかの一般的なシナリオを探りましょう。進む前に、Springアプリケーションが実行されていることを確認してください。

Pokemonを作成する

Shell

 

   curl -X PUT -H "Content-Type: application/json" -d '{"id": "1", "name": "Pikachu", "location": "Forest"}' http://localhost:8080/pokemons

このコマンドは、ID 1、名前Pikachu、場所Forestを持つ新しいPokemonを作成します。

IDでPokemonを取得する

Shell

 

curl http://localhost:8080/pokemons/{id}

{id}を、作成したPokemonの実際のIDに置き換えてください。

Pokemonを更新する

Shell

 

   curl -X PUT -H "Content-Type: application/json" -d '{"id": "1", "name": "Raichu", "location": "Thunderstorm"}' http://localhost:8080/pokemons

このコマンドは、ID 1の既存のPokemonの名前をRaichu、場所をThunderstormに更新します。

IDでPokemonを削除する

Shell

 

curl -X DELETE http://localhost:8080/pokemons/{id}

{id}を、削除したいPokemonの実際のIDに置き換えてください。

これらのシナリオは、Pokemon API内の基本的なCRUD操作の包括的なテストを提供し、Pokemonの作成から始まります。特定のユースケースやデータに基づいてコマンドを必要に応じて調整してください。テストを楽しんでください!

結論

このチュートリアルでは、Spring Boot 3.2.0の機能を活用して、HarperDBとシームレスに統合されたシンプルなポケモンAPIを作成しました。最新のSpringバージョンは重要な機能を導入し、回復力のあるスケーラブルなアプリケーションを作成する能力を強化しました。

不変エンティティ、Spring IoC、HarperDBを利用して、現代のJava開発の簡潔さを実演しました。デモコードはこちらで入手可能で、あなたのプロジェクトの基盤となり、カスタマイズが可能です。

最新情報や詳細な洞察については、公式のSpringブログを参照してください。Spring BootとHarperDBの旅を革新的でコーディングの喜びに満ちたものにしましょう!楽しいコーディングを!

Source:
https://dzone.com/articles/getting-started-with-boot-spring-320-building-a-he