次の方法で共有


Azure SQL Databaseで Spring Data JDBC を使用する

このチュートリアルでは、Spring Data JDBC を使用して、Azure SQL Database にデータを格納する方法について説明します。

JDBC は、従来のリレーショナル データベースに接続するための標準的なJava API です。

このチュートリアルでは、Microsoft Entra認証と SQL Database 認証という 2 つの認証方法を取り上げます。 [パスワードレス] タブにはMicrosoft Entra認証が表示され、[パスワード] タブには SQL Database 認証が表示されます。

Microsoft Entra認証は、Microsoft Entra IDで定義された ID を使用して Azure Database for SQL Database に接続するためのメカニズムです。 Microsoft Entra認証を使用すると、データベース ユーザー ID やその他の Microsoft サービスを一元的な場所で管理できるため、アクセス許可の管理が簡素化されます。

SQL Database 認証では、SQL Database に格納されているアカウントが使用されます。 アカウントの資格情報としてパスワードを使用することを選択した場合、これらの資格情報はユーザー テーブルに格納されます。 これらのパスワードは SQL Database に保存されるため、パスワードのローテーションは自分で管理する必要があります。

前提条件

  • sqlcmd ユーティリティ。

  • ODBC ドライバー 17 または 18。

  • お持ちでない場合は、sqlservertest という名前の Azure SQL Server インスタンスと、demo という名前のデータベースを作成します。 手順については、「Quickstart: 単一データベースの作成 - Azure SQL Database」を参照してください。

  • Spring Boot アプリケーションがない場合は、 Spring Initializr を使用して Maven プロジェクトを作成します。 必ず Maven Project を選択し、DependenciesSpring WebSpring Data JDBC、および MS SQL Server Driver 依存関係を追加し、バージョン 8 以降Java選択します。

サンプル アプリケーション参照

このチュートリアルでは、サンプル アプリケーションをコーディングします。 ご利用を急いでいる場合、このアプリケーションは既に開発済みで、https://github.com/Azure-Samples/quickstart-spring-data-jdbc-sql-server から利用可能です。

Azure SQL Database サーバーのファイアウォール規則を構成する

Azure SQL Database インスタンスは既定でセキュリティで保護されます。 受信接続を一切許可しないファイアウォールがあります。

データベースを使用できるようにするには、サーバーのファイアウォールを開いて、データベース サーバーにアクセスするためのローカル IP アドレスを許可する必要があります。 詳細については、「Tutorial: Azure SQL Databaseを参照してください。

Windows コンピューター上の Linux 用 Windows サブシステム (WSL) からAzure SQL Database サーバーに接続する場合は、WSL ホスト ID をファイアウォールに追加する必要があります。

SQL データベースの管理者以外のユーザーを作成し、アクセス許可を付与する

この手順では、管理者以外のユーザーを作成し、 データベースに対するすべてのアクセス許可をそのユーザーに付与します。

  • パスワードレス (推奨)
  • パスワード

パスワードレス接続を使用するには、Tutorial: Azure SQL Database でデータベースをセキュリティで保護するを参照するか、Service Connector を使用して、Azure SQL Database サーバーの Microsoft Entra 管理者ユーザーを作成します。次の手順を参照してください。

  1. まず、Azure CLIの Service Connector パスワードなしの拡張機能をインストールします。

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. 次に、次のコマンドを使用して、管理者以外のユーザー Microsoft Entra作成します。

    az connection create sql \
        --resource-group <your-resource-group-name> \
        --connection sql_conn \
        --target-resource-group <your-resource-group-name> \
        --server sqlservertest \
        --database demo \
        --user-account \
        --query authInfo.userName \
        --output tsv
    

作成したMicrosoft Entra管理者は SQL データベース管理者ユーザーであるため、新しいユーザーを作成する必要はありません。

重要

Azure SQLデータベースのパスワードレス接続では、MS SQL Server Driver をバージョン 12.1.0 以降にアップグレードする必要があります。 接続オプションは、 (バージョン ) と (バージョン ) です。

Azure SQL Databaseからデータを格納する

Azure SQL Database インスタンスでは、Spring Cloud Azureを使用してデータを格納できます。

Spring Cloud Azure Starter モジュールをインストールするには、pom.xml ファイルに次の依存関係を追加します。

  • Spring Cloud Azure部品表 (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.0.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    注記

    Spring Boot 4.0.x を使用している場合は、必ず バージョンを に設定してください。

    Spring Boot 3.5.x を使用している場合は、必ず バージョンを に設定してください。

    Spring Boot 3.1.x-3.5.x を使用している場合は、必ず バージョンを に設定してください。

    Spring Boot 2.xを使用している場合は、 バージョンを に設定してください。

    この部品表 (BOM) は、 セクションで構成する必要があります。 これにより、すべての Spring Cloud Azure依存関係で同じバージョンが使用されるようになります。

    この BOM に使用されるバージョンの詳細については、「どのバージョンの Spring Cloud Azure を使用すべきですか?」を参照してください。

  • Spring Cloud Azure Starter アーティファクト:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter</artifactId>
    </dependency>
    

    注記

    これは依存関係であるため、の セクションに追加する必要があります。 以前に追加したBOMによって管理されているため、バージョンはここでは設定されていません。

Azure SQL Databaseを使用するように Spring Boot を構成する

Spring Data JDBC を使用してAzure SQL Databaseからデータを格納するには、次の手順に従ってアプリケーションを構成します。

  1. application.properties 構成ファイルでAzure SQL Database資格情報を構成します。

    • パスワードレス (推奨)
    • パスワード
    logging.level.org.springframework.jdbc.core=DEBUG
    
    spring.datasource.url=jdbc:sqlserver://sqlservertest.database.windows.net:1433;databaseName=demo;authentication=DefaultAzureCredential;
    
    spring.sql.init.mode=always
    

    警告

    構成プロパティは、サーバーが起動されるたびに、次に作成するschema.sql ファイルを使用して、Spring Boot によってデータベース スキーマが自動的に生成されることを意味します。 これはテストには適していますが、再起動するたびにデータが削除されるため、運用環境では使用しないでください。

  1. src/main/resources/schema.sql 構成ファイルを作成してデータベース スキーマを構成し、次の内容を追加します。

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. 新しい Todo Java クラスを作成します。 このクラスは、Spring Boot によって自動的に作成される、 テーブルにマップされたドメイン モデルです。 次のコードは、 メソッドと メソッドを無視します。

    import org.springframework.data.annotation.Id;
    
    public class Todo {
    
        public Todo() {
        }
    
        public Todo(String description, String details, boolean done) {
            this.description = description;
            this.details = details;
            this.done = done;
        }
    
        @Id
        private Long id;
    
        private String description;
    
        private String details;
    
        private boolean done;
    
    }
    
  2. スタートアップ クラス ファイルを編集して、次の内容を表示します。

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.context.event.ApplicationReadyEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.annotation.Bean;
    import org.springframework.data.repository.CrudRepository;
    
    import java.util.stream.Stream;
    
    @SpringBootApplication
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @Bean
        ApplicationListener<ApplicationReadyEvent> basicsApplicationListener(TodoRepository repository) {
            return event->repository
                .saveAll(Stream.of("A", "B", "C").map(name->new Todo("configuration", "congratulations, you have set up correctly!", true)).toList())
                .forEach(System.out::println);
        }
    
    }
    
    interface TodoRepository extends CrudRepository<Todo, Long> {
    
    }
    

    ヒント

    このチュートリアルでは、構成またはコードに認証操作はありません。 ただし、Azure サービスに接続するには認証が必要です。 認証を完了するには、Azure ID を使用する必要があります。 Spring Cloud Azureでは DefaultAzureCredential を使用します。これは、コードを変更せずに資格情報を取得するのに役立つAzure ID ライブラリが提供します。

    は複数の認証方法をサポートしており、実行時に使用する方法が決定されます。 このアプローチを採用すると、環境固有のコードを実装することなく、異なる環境 (ローカルと運用環境など) で異なる認証方法をアプリに使用できます。 詳細については、「 DefaultAzureCredential」を参照してください。

    ローカル開発環境で認証を完了するには、Azure CLI、Visual Studio Code、PowerShell、またはその他の方法を使用できます。 詳細については、「Java開発環境での Azure 認証を参照してください。 Azureホスティング環境で認証を完了するには、ユーザー割り当てマネージド ID を使用することをお勧めします。 詳細については、「Azure リソースのマネージド ID とは」を参照してください>

  3. アプリケーションを起動します。 アプリケーションは、データベースにデータを格納します。 次の例のようなログが表示されます。

    2023-02-01 10:22:36.701 DEBUG 7948 --- [main] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement [INSERT INTO todo (description, details, done) VALUES (?, ?, ?)]    
    com.example.demo.Todo@4bdb04c8
    

Azure Spring Appsにデプロイする

Spring Boot アプリケーションがローカルで実行されたので、運用環境に移行します。 Azure Spring Apps を使用すると、コードを変更することなく、Spring Boot アプリケーションをAzureに簡単にデプロイできます。 Spring アプリケーションのインフラストラクチャはこのサービスによって管理されるため、開発者はコードに専念できます。 Azure Spring Appsでは、包括的な監視と診断、構成管理、サービス検出、CI/CD 統合、ブルーグリーンデプロイなどを使用したライフサイクル管理が提供されます。 アプリケーションをAzure Spring Appsにデプロイするには、「初めてのアプリケーションを Azure Spring Apps にデプロイする」を参照してください。

次のステップ

Spring 開発者向けの Azure