Używanie rozwiązania Spring Data JDBC z usługą Azure Database for PostgreSQL
W tym samouczku pokazano, jak przechowywać dane w bazie danych usługi Azure Database for PostgreSQL przy użyciu narzędzia Spring Data JDBC.
JDBC to standardowy interfejs API języka Java do łączenia się z tradycyjnymi relacyjnymi bazami danych.
W tym samouczku uwzględniliśmy dwie metody uwierzytelniania: uwierzytelnianie firmy Microsoft Entra i uwierzytelnianie PostgreSQL. Karta Bez hasła zawiera uwierzytelnianie firmy Microsoft Entra, a karta Hasło zawiera uwierzytelnianie PostgreSQL.
Uwierzytelnianie entra firmy Microsoft to mechanizm nawiązywania połączenia z usługą Azure Database for PostgreSQL przy użyciu tożsamości zdefiniowanych w identyfikatorze Entra firmy Microsoft. Dzięki uwierzytelnieniu firmy Microsoft Entra można zarządzać tożsamościami użytkowników bazy danych i innymi usługi firmy Microsoft w centralnej lokalizacji, co upraszcza zarządzanie uprawnieniami.
Uwierzytelnianie postgreSQL używa kont przechowywanych w usłudze PostgreSQL. Jeśli zdecydujesz się używać haseł jako poświadczeń dla kont, te poświadczenia będą przechowywane w user
tabeli. Ponieważ te hasła są przechowywane w usłudze PostgreSQL, musisz samodzielnie zarządzać rotacją haseł.
Wymagania wstępne
Subskrypcja platformy Azure — utwórz bezpłatnie.
Zestaw Java Development Kit (JDK) w wersji 8 lub nowszej.
Klient wiersza polecenia postgreSQL.
Jeśli nie masz aplikacji Spring Boot, utwórz projekt Maven za pomocą narzędzia Spring Initializr. Pamiętaj, aby wybrać pozycję Projekt Maven i w obszarze Zależności dodaj zależności Spring Web, Spring Data JDBC i Zależności sterownika PostgreSQL, a następnie wybierz pozycję Java w wersji 8 lub nowszej.
- Jeśli go nie masz, utwórz wystąpienie serwera elastycznego usługi Azure Database for PostgreSQL o nazwie
postgresqlflexibletest
i bazę danych o nazwiedemo
. Aby uzyskać instrukcje, zobacz Szybki start: tworzenie usługi Azure Database for PostgreSQL — serwer elastyczny w witrynie Azure Portal.
Zobacz przykładową aplikację
W tym samouczku utworzysz kod przykładowej aplikacji. Jeśli chcesz przyspieszyć, ta aplikacja jest już kodowana i dostępna pod adresem https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresql.
Konfigurowanie reguły zapory dla serwera PostgreSQL
Wystąpienia usługi Azure Database for PostgreSQL są domyślnie zabezpieczone. Ma ona zaporę, która nie zezwala na żadne połączenie przychodzące.
Aby móc używać bazy danych, otwórz zaporę serwera, aby zezwolić lokalnemu adresowi IP na dostęp do serwera bazy danych. Aby uzyskać więcej informacji, zobacz Reguły zapory w usłudze Azure Database for PostgreSQL — serwer elastyczny.
Jeśli łączysz się z serwerem PostgreSQL z Podsystem Windows dla systemu Linux (WSL) na komputerze z systemem Windows, musisz dodać identyfikator hosta WSL do zapory.
Tworzenie użytkownika niebędącego administratorem bazy danych PostgreSQL i udzielanie uprawnień
Następnie utwórz użytkownika niebędącego administratorem i przyznaj wszystkie uprawnienia do bazy danych.
Poniższa metoda umożliwia utworzenie użytkownika niebędącego administratorem korzystającego z połączenia bez hasła.
Użyj następującego polecenia, aby zainstalować rozszerzenie bez hasła łącznika usługi dla interfejsu wiersza polecenia platformy Azure:
az extension add --name serviceconnector-passwordless --upgrade
Użyj następującego polecenia, aby utworzyć użytkownika innego niż administrator firmy Microsoft:
az connection create postgres-flexible \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlflexibletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Po zakończeniu wykonywania polecenia zanotuj nazwę użytkownika w danych wyjściowych konsoli.
Przechowywanie danych z usługi Azure Database for PostgreSQL
Teraz, gdy masz wystąpienie serwera elastycznego usługi Azure Database for PostgreSQL, możesz przechowywać dane przy użyciu platformy Azure Spring Cloud.
Aby zainstalować moduł Spring Cloud Azure Starter JDBC PostgreSQL, dodaj następujące zależności do pliku pom.xml :
Projekt Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Uwaga
Jeśli używasz środowiska Spring Boot 2.x, pamiętaj, aby ustawić
spring-cloud-azure-dependencies
wersję na4.19.0
. Ten rachunek materiału (BOM) należy skonfigurować w<dependencyManagement>
sekcji pliku pom.xml . Gwarantuje to, że wszystkie zależności platformy Azure platformy Spring Cloud korzystają z tej samej wersji. Aby uzyskać więcej informacji na temat wersji używanej dla tego modelu BOM, zobacz Która wersja platformy Spring Cloud platformy Azure powinna być używana.Artefakt Spring Cloud Azure Starter JDBC PostgreSQL:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Uwaga
Połączenia bez hasła są obsługiwane od wersji 4.5.0
.
Konfigurowanie platformy Spring Boot do korzystania z usługi Azure Database for PostgreSQL
Aby przechowywać dane z usługi Azure Database for PostgreSQL przy użyciu narzędzia Spring Data JDBC, wykonaj następujące kroki, aby skonfigurować aplikację:
Skonfiguruj poświadczenia usługi Azure Database for PostgreSQL, dodając następujące właściwości do pliku konfiguracji application.properties .
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlflexibletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username> spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Ostrzeżenie
Właściwość
spring.sql.init.mode=always
konfiguracji oznacza, że platforma Spring Boot automatycznie wygeneruje schemat bazy danych przy użyciu pliku schema.sql , który zostanie utworzony przy każdym uruchomieniu serwera. Ta funkcja doskonale nadaje się do testowania, ale pamiętaj, że dane zostaną usunięte po każdym ponownym uruchomieniu, więc nie należy ich używać w środowisku produkcyjnym.
- Jeśli go nie masz, utwórz wystąpienie pojedynczego serwera usługi Azure Database for PostgreSQL o nazwie i bazę danych o nazwie
postgresqlsingletest
demo
. Aby uzyskać instrukcje, zobacz Szybki start: tworzenie serwera usługi Azure Database for PostgreSQL przy użyciu witryny Azure Portal.
Zobacz przykładową aplikację
W tym artykule kodujesz przykładową aplikację. Jeśli chcesz przyspieszyć, ta aplikacja jest już kodowana i dostępna pod adresem https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresql.
Konfigurowanie reguły zapory dla serwera PostgreSQL
Wystąpienia usługi Azure Database for PostgreSQL są domyślnie zabezpieczone. Ma ona zaporę, która nie zezwala na żadne połączenie przychodzące.
Aby móc używać bazy danych, otwórz zaporę serwera, aby zezwolić lokalnemu adresowi IP na dostęp do serwera bazy danych. Aby uzyskać więcej informacji, zobacz Tworzenie reguł zapory dla usługi Azure Database for PostgreSQL — pojedynczy serwer i zarządzanie nimi przy użyciu witryny Azure Portal.
Jeśli łączysz się z serwerem PostgreSQL z Podsystem Windows dla systemu Linux (WSL) na komputerze z systemem Windows, musisz dodać identyfikator hosta WSL do zapory.
Tworzenie użytkownika niebędącego administratorem bazy danych PostgreSQL i udzielanie uprawnień
Następnie utwórz użytkownika niebędącego administratorem i przyznaj wszystkie uprawnienia do bazy danych.
Poniższa metoda umożliwia utworzenie użytkownika niebędącego administratorem korzystającego z połączenia bez hasła.
Użyj następującego polecenia, aby zainstalować rozszerzenie bez hasła łącznika usługi dla interfejsu wiersza polecenia platformy Azure:
az extension add --name serviceconnector-passwordless --upgrade
Użyj następującego polecenia, aby utworzyć użytkownika innego niż administrator firmy Microsoft:
az connection create postgres \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlsingletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Po zakończeniu wykonywania polecenia zanotuj nazwę użytkownika w danych wyjściowych konsoli.
Przechowywanie danych z usługi Azure Database for PostgreSQL
Teraz, gdy masz wystąpienie pojedynczego serwera usługi Azure Database for PostgreSQL, możesz przechowywać dane przy użyciu platformy Azure Spring Cloud.
Aby zainstalować moduł Spring Cloud Azure Starter JDBC PostgreSQL, dodaj następujące zależności do pliku pom.xml :
Projekt Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Uwaga
Jeśli używasz środowiska Spring Boot 2.x, pamiętaj, aby ustawić
spring-cloud-azure-dependencies
wersję na4.19.0
. Ten rachunek materiału (BOM) należy skonfigurować w<dependencyManagement>
sekcji pliku pom.xml . Gwarantuje to, że wszystkie zależności platformy Azure platformy Spring Cloud korzystają z tej samej wersji. Aby uzyskać więcej informacji na temat wersji używanej dla tego modelu BOM, zobacz Która wersja platformy Spring Cloud platformy Azure powinna być używana.Artefakt Spring Cloud Azure Starter JDBC PostgreSQL:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Uwaga
Połączenia bez hasła są obsługiwane od wersji 4.5.0
.
Konfigurowanie platformy Spring Boot do korzystania z usługi Azure Database for PostgreSQL
Aby przechowywać dane z usługi Azure Database for PostgreSQL przy użyciu narzędzia Spring Data JDBC, wykonaj następujące kroki, aby skonfigurować aplikację:
Skonfiguruj poświadczenia usługi Azure Database for PostgreSQL, dodając następujące właściwości do pliku konfiguracji application.properties .
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlsingletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username>@postgresqlsingletest spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Ostrzeżenie
Właściwość
spring.sql.init.mode=always
konfiguracji oznacza, że platforma Spring Boot automatycznie wygeneruje schemat bazy danych przy użyciu pliku schema.sql , który zostanie utworzony przy każdym uruchomieniu serwera. Ta funkcja doskonale nadaje się do testowania, ale pamiętaj, że dane zostaną usunięte po każdym ponownym uruchomieniu, więc nie należy ich używać w środowisku produkcyjnym.
Utwórz plik konfiguracji src/main/resources/schema.sql, aby skonfigurować schemat bazy danych, a następnie dodaj następującą zawartość.
DROP TABLE IF EXISTS todo; CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
Utwórz nową
Todo
klasę Języka Java. Ta klasa jest modelem domeny mapowanym na tabelętodo
, która zostanie utworzona automatycznie przez platformę Spring Boot. Poniższy kod ignorujegetters
metody isetters
.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; }
Edytuj plik klasy uruchamiania, aby wyświetlić następującą zawartość.
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> { }
Napiwek
W tym samouczku nie ma żadnych operacji uwierzytelniania w konfiguracjach ani kodzie. Jednak nawiązywanie połączenia z usługami platformy Azure wymaga uwierzytelniania. Aby ukończyć uwierzytelnianie, musisz użyć usługi Azure Identity. Platforma Spring Cloud na platformie Azure używa
DefaultAzureCredential
biblioteki tożsamości platformy Azure, która ułatwia uzyskiwanie poświadczeń bez żadnych zmian w kodzie.DefaultAzureCredential
obsługuje wiele metod uwierzytelniania i określa, która metoda ma być używana w czasie wykonywania. Takie podejście umożliwia aplikacji używanie różnych metod uwierzytelniania w różnych środowiskach (takich jak środowiska lokalne i produkcyjne) bez implementowania kodu specyficznego dla środowiska. Aby uzyskać więcej informacji, zobacz DefaultAzureCredential.Aby ukończyć uwierzytelnianie w lokalnych środowiskach deweloperskich, możesz użyć interfejsu wiersza polecenia platformy Azure, programu Visual Studio Code, programu PowerShell lub innych metod. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie platformy Azure w środowiskach deweloperskich Java. Aby ukończyć uwierzytelnianie w środowiskach hostingu platformy Azure, zalecamy użycie tożsamości zarządzanej przypisanej przez użytkownika. Aby uzyskać więcej informacji, zobacz Co to są tożsamości zarządzane dla zasobów platformy Azure?
Uruchom aplikację. Aplikacja przechowuje dane w bazie danych. Zobaczysz dzienniki podobne do następującego przykładu:
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
Wdrażanie w usłudze Azure Spring Apps
Teraz, gdy aplikacja Spring Boot działa lokalnie, nadszedł czas, aby przenieść ją do środowiska produkcyjnego. Usługa Azure Spring Apps ułatwia wdrażanie aplikacji Spring Boot na platformie Azure bez żadnych zmian w kodzie. Usługa zarządza infrastrukturą aplikacji Spring, aby deweloperzy mogli skupić się na swoim kodzie. Usługa Azure Spring Apps zapewnia zarządzanie cyklem życia przy użyciu kompleksowego monitorowania i diagnostyki, zarządzania konfiguracją, odnajdywania usług, integracji/ciągłego wdrażania, wdrożeń niebieskich zielonych i nie tylko. Aby wdrożyć aplikację w usłudze Azure Spring Apps, zobacz Wdrażanie pierwszej aplikacji w usłudze Azure Spring Apps.