Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra como criar uma aplicação de exemplo que utiliza Java e JDBC para armazenar e recuperar informação no Base de Dados do Azure para PostgreSQL.
JDBC é a API padrão Java para ligação a bases de dados relacionais tradicionais.
Este artigo inclui dois métodos de autenticação: autenticação Microsoft Entra e autenticação PostgreSQL. A guia Sem senha mostra a autenticação do Microsoft Entra e a guia Senha mostra a autenticação do PostgreSQL.
A autenticação do Microsoft Entra é um mecanismo para se conectar ao Banco de Dados do Azure para PostgreSQL usando identidades definidas na ID do Microsoft Entra. Ao utilizar a autenticação Microsoft Entra, pode gerir as identidades dos utilizadores da base de dados e outros serviços serviços Microsoft numa localização central, o que simplifica a gestão de permissões.
A autenticação do PostgreSQL usa contas armazenadas no PostgreSQL. Se optar por usar palavras-passe como credenciais para as contas, armazene essas credenciais na user tabela. Como estas palavras-passe estão armazenadas no PostgreSQL, tens de gerir tu próprio a rotação das palavras-passe.
Pré-requisitos
- Uma conta do Azure. Se não tiver uma, obtenha uma avaliação gratuita.
- Azure Cloud Shell ou CLI do Azure. Use o Azure Cloud Shell para ser autenticado automaticamente e ter acesso a todas as ferramentas de que precisa.
- Kit de Desenvolvimento Java suportado, versão 8 (incluído no Azure Cloud Shell).
- A ferramenta de construção Apache Maven .
Preparar o ambiente de trabalho
Primeiro, use o seguinte comando para configurar algumas variáveis de ambiente.
export AZ_RESOURCE_GROUP=database-workshop
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=<YOUR_DATABASE_NAME>
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME=<YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME>
export AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName -o tsv)
Substitua os placeholders pelos seguintes valores, que são usados ao longo deste artigo.
-
<YOUR_DATABASE_SERVER_NAME>: O nome do seu servidor flexível Base de Dados do Azure para PostgreSQL, que deve ser único no Azure. -
<YOUR_DATABASE_NAME>: O nome da base de dados do servidor flexível Base de Dados do Azure para PostgreSQL, que deve ser único dentro do Azure. -
<YOUR_AZURE_REGION>: A região do Azure a ser usada. Podes usareastuspor defeito, mas escolhe uma região mais próxima de onde vives. Para ver a lista completa de regiões disponíveis, digiteaz account list-locations. -
<YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME>: O nome de utilizador para o seu servidor flexível Base de Dados do Azure para PostgreSQL. Certifique-se de que o nome de utilizador é válido no seu tenant Microsoft Entra. -
<YOUR_LOCAL_IP_ADDRESS>: O endereço IP do seu computador local, a partir do qual executa a sua aplicação Spring Boot. Uma maneira conveniente de encontrá-lo é abrir whatismyip.akamai.com.
Importante
Ao definir <YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME>, o utilizador deve já existir no seu tenant Microsoft Entra, caso contrário não pode criar um utilizador Microsoft Entra na sua base de dados.
Em seguida, crie um grupo de recursos usando o seguinte comando:
az group create \
--name $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--output tsv
Crie um servidor flexível
As seções a seguir descrevem como criar e configurar sua instância de banco de dados.
Criar um servidor flexível e configurar o utilizador administrador
Observação
Para informações mais detalhadas sobre a criação do Base de Dados do Azure para PostgreSQL flexible servers, consulte Quickstart: Criar um servidor flexível Base de Dados do Azure para PostgreSQL.
Se estiver a utilizar a CLI do Azure, execute o seguinte comando para se certificar de que tem permissão suficiente:
az login --scope https://graph.microsoft.com/.default
Execute o seguinte comando para criar o servidor:
az postgres flexible-server create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--location $AZ_LOCATION \
--yes \
--output tsv
Para configurar um administrador do Microsoft Entra depois de criar o servidor, siga as etapas em Gerenciar funções do Microsoft Entra no Banco de Dados do Azure para PostgreSQL.
Importante
Quando configura um administrador, adiciona um novo utilizador com privilégios completos de administrador à base de dados Azure do servidor flexível Base de Dados do Azure para PostgreSQL. Pode criar vários administradores do Microsoft Entra em cada servidor flexível do Base de Dados do Azure para PostgreSQL.
Tem algum problema? Deixe-nos saber.
Configurar uma regra de firewall para sua instância do Banco de Dados do Azure para PostgreSQL
Os servidores flexíveis do Base de Dados do Azure para PostgreSQL são seguros por defeito. Eles têm um firewall que bloqueia todas as ligações de entrada. Para usar a sua base de dados, adicione uma regra de firewall que conceda ao seu endereço IP local acesso ao servidor da base de dados.
Como você configurou seu endereço IP local no início deste artigo, você pode abrir o firewall do servidor executando o seguinte comando:
az postgres flexible-server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS \
--output tsv
Se estiver a ligar-se ao seu servidor flexível Base de Dados do Azure para PostgreSQL a partir do Subsistema Windows para Linux (WSL) num computador Windows, precisa de adicionar o ID do host WSL ao seu firewall.
Obtenha o endereço IP da sua máquina anfitriã executando o seguinte comando em WSL:
cat /etc/resolv.conf
Copie o endereço IP que se segue ao termo nameserver, e depois use o seguinte comando para definir uma variável de ambiente para o Endereço IP WSL:
AZ_WSL_IP_ADDRESS=<the-copied-IP-address>
Em seguida, use o seguinte comando para abrir o firewall do servidor para seu aplicativo baseado em WSL:
az postgres flexible-server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_WSL_IP_ADDRESS \
--end-ip-address $AZ_WSL_IP_ADDRESS \
--output tsv
Configurar um Banco de Dados do Azure para banco de dados PostgreSQL
Crie um novo banco de dados usando o seguinte comando:
az postgres flexible-server db create \
--resource-group $AZ_RESOURCE_GROUP \
--database-name $AZ_DATABASE_NAME \
--server-name $AZ_DATABASE_SERVER_NAME \
--output tsv
Criar um Banco de Dados do Azure para usuário não administrador do PostgreSQL e conceder permissão
Em seguida, crie um usuário não administrador e conceda todas as permissões ao banco de dados.
Observação
Para obter informações mais detalhadas sobre como gerir os utilizadores do Base de Dados do Azure para PostgreSQL, consulte Gerir funções Microsoft Entra no Base de Dados do Azure para PostgreSQL.
Cria um script SQL chamado create_ad_user.sql para criar um utilizador não administrativo. Adicione o seguinte conteúdo e salve-o localmente:
cat << EOF > create_ad_user.sql
select * from pgaadauth_create_principal('$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME', false, false);
EOF
Depois, use o seguinte comando para executar o script SQL e criar o utilizador não administrador da Microsoft Entra:
psql "host=$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com user=$CURRENT_USERNAME dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user.sql
Use o seguinte comando para remover o ficheiro temporário de script SQL:
rm create_ad_user.sql
Criar um novo projeto Java
Usando o seu IDE favorito, crie um novo projeto Java usando Java 8 ou posterior. Adicione um ficheiropom.xml na pasta raiz com o seguinte conteúdo:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</project>
Este arquivo é um arquivo Apache Maven que configura seu projeto para usar:
- Java 8
- Um driver PostgreSQL recente para Java
Preparar um arquivo de configuração para se conectar ao Banco de Dados do Azure para PostgreSQL
Crie um ficheiro src/main/resources/application.properties e adicione o seguinte conteúdo:
cat << EOF > src/main/resources/application.properties
url=jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin
user=${AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME}
EOF
Observação
A propriedade de configuração url inclui ?sslmode=require para garantir que o driver JDBC use TLS (Transport Layer Security) ao conectar-se à base de dados. O uso do TLS é obrigatório com o Base de Dados do Azure para PostgreSQL para servidores flexíveis e é uma prática de segurança recomendada.
Criar um arquivo SQL para gerar o esquema de banco de dados
Usa um ficheiro src/main/resources/schema.sql para criar um esquema de base de dados. Crie esse ficheiro e adicione o seguinte conteúdo:
DROP TABLE IF EXISTS todo;
CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
Codificar a aplicação
As secções seguintes explicam a escrita do código Java que se liga à base de dados, define um modelo de dados e executa operações básicas de CRUD.
Conectar-se ao banco de dados
De seguida, adicione o código Java que usa JDBC para armazenar e recuperar dados do seu servidor flexível Base de Dados do Azure para PostgreSQL.
Crie um arquivo src/main/java/DemoApplication.java e adicione o seguinte conteúdo:
package com.example.demo;
import java.sql.*;
import java.util.*;
import java.util.logging.Logger;
public class DemoApplication {
private static final Logger log;
static {
System.setProperty("java.util.logging.SimpleFormatter.format", "[%4$-7s] %5$s %n");
log =Logger.getLogger(DemoApplication.class.getName());
}
public static void main(String[] args) throws Exception {
log.info("Loading application properties");
Properties properties = new Properties();
properties.load(DemoApplication.class.getClassLoader().getResourceAsStream("application.properties"));
log.info("Connecting to the database");
Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties);
log.info("Database connection test: " + connection.getCatalog());
log.info("Create database schema");
Scanner scanner = new Scanner(DemoApplication.class.getClassLoader().getResourceAsStream("schema.sql"));
Statement statement = connection.createStatement();
while (scanner.hasNextLine()) {
statement.execute(scanner.nextLine());
}
/*
Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
insertData(todo, connection);
todo = readData(connection);
todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);
deleteData(todo, connection);
*/
log.info("Closing database connection");
connection.close();
}
}
Tem algum problema? Deixe-nos saber.
Este Java código usa o application.properties e os ficheiros schema.sql que criaste anteriormente para se ligar ao servidor flexível Base de Dados do Azure para PostgreSQL e criar um esquema que armazena os dados.
Neste ficheiro, os métodos para inserir, ler, atualizar e eliminar dados são comentados. O resto deste artigo explica a codificação desses métodos, e podes descompô-los um após o outro.
Observação
As credenciais do banco de dados são armazenadas nas propriedades de usuário e senha do arquivo application.properties . O código utiliza essas credenciais ao executar DriverManager.getConnection(properties.getProperty("url"), properties);, pois o ficheiro de propriedades é passado como argumento.
Agora você pode executar esta classe principal com sua ferramenta favorita:
- Usando o seu IDE, pode clicar com o botão direito na classe DemoApplication e executá-la.
- Usando o Maven, você pode executar o aplicativo executando:
mvn exec:java -Dexec.mainClass="com.example.demo.DemoApplication".
A aplicação liga-se ao servidor flexível Base de Dados do Azure para PostgreSQL, cria um esquema de base de dados e depois fecha a ligação, como vê nos registos da consola:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Closing database connection
Criar uma classe de domínio
Crie uma nova Todo classe Java ao lado da DemoApplication classe e adicione o seguinte código:
package com.example.demo;
public class Todo {
private Long id;
private String description;
private String details;
private boolean done;
public Todo() {
}
public Todo(Long id, String description, String details, boolean done) {
this.id = id;
this.description = description;
this.details = details;
this.done = done;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
public boolean isDone() {
return done;
}
public void setDone(boolean done) {
this.done = done;
}
@Override
public String toString() {
return "Todo{" +
"id=" + id +
", description='" + description + '\'' +
", details='" + details + '\'' +
", done=" + done +
'}';
}
}
Esta classe é um modelo de domínio mapeado para a todo tabela que criaste ao executar o script schema.sql .
Inserir dados no Banco de Dados do Azure para PostgreSQL
No arquivo src/main/java/DemoApplication.java, após o método principal, adicione o seguinte método para inserir dados no banco de dados:
private static void insertData(Todo todo, Connection connection) throws SQLException {
log.info("Insert data");
PreparedStatement insertStatement = connection
.prepareStatement("INSERT INTO todo (id, description, details, done) VALUES (?, ?, ?, ?);");
insertStatement.setLong(1, todo.getId());
insertStatement.setString(2, todo.getDescription());
insertStatement.setString(3, todo.getDetails());
insertStatement.setBoolean(4, todo.isDone());
insertStatement.executeUpdate();
}
Agora pode descomentar as duas linhas seguintes no método main.
Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
insertData(todo, connection);
Quando executa a classe principal, ela deve produzir o seguinte resultado:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Closing database connection
Ler dados do Base de Dados do Azure para PostgreSQL
Para validar que o seu código funciona corretamente, leia os dados que inseriu anteriormente.
No arquivo src/main/java/DemoApplication.java, após o insertData método, adicione o seguinte método para ler dados do banco de dados:
private static Todo readData(Connection connection) throws SQLException {
log.info("Read data");
PreparedStatement readStatement = connection.prepareStatement("SELECT * FROM todo;");
ResultSet resultSet = readStatement.executeQuery();
if (!resultSet.next()) {
log.info("There is no data in the database!");
return null;
}
Todo todo = new Todo();
todo.setId(resultSet.getLong("id"));
todo.setDescription(resultSet.getString("description"));
todo.setDetails(resultSet.getString("details"));
todo.setDone(resultSet.getBoolean("done"));
log.info("Data read from the database: " + todo.toString());
return todo;
}
Agora você pode descomentar a seguinte linha no main método:
todo = readData(connection);
Quando executa a classe principal, ela deve produzir o seguinte resultado:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Closing database connection
Atualizar dados no Base de Dados do Azure para PostgreSQL
Para atualizar os dados, utilize os seguintes passos.
Ainda no arquivo src/main/java/DemoApplication.java , após o readData método, adicione o seguinte método para atualizar dados dentro do banco de dados:
private static void updateData(Todo todo, Connection connection) throws SQLException {
log.info("Update data");
PreparedStatement updateStatement = connection
.prepareStatement("UPDATE todo SET description = ?, details = ?, done = ? WHERE id = ?;");
updateStatement.setString(1, todo.getDescription());
updateStatement.setString(2, todo.getDetails());
updateStatement.setBoolean(3, todo.isDone());
updateStatement.setLong(4, todo.getId());
updateStatement.executeUpdate();
readData(connection);
}
Agora pode descomentar as duas linhas seguintes no método main.
todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);
Quando executa a classe principal, ela deve produzir o seguinte resultado:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Update data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true}
[INFO ] Closing database connection
Eliminar dados no Base de Dados do Azure para PostgreSQL
Por fim, exclua os dados inseridos anteriormente.
Ainda no arquivo src/main/java/DemoApplication.java , após o updateData método, adicione o seguinte método para excluir dados dentro do banco de dados:
private static void deleteData(Todo todo, Connection connection) throws SQLException {
log.info("Delete data");
PreparedStatement deleteStatement = connection.prepareStatement("DELETE FROM todo WHERE id = ?;");
deleteStatement.setLong(1, todo.getId());
deleteStatement.executeUpdate();
readData(connection);
}
Agora você pode descomentar a seguinte linha no main método:
deleteData(todo, connection);
Quando executa a classe principal, ela deve produzir o seguinte resultado:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Update data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true}
[INFO ] Delete data
[INFO ] Read data
[INFO ] There is no data in the database!
[INFO ] Closing database connection
Limpeza de recursos
Criaste uma aplicação Java que usa JDBC para armazenar e recuperar dados de um servidor flexível Base de Dados do Azure para PostgreSQL.
Para limpar todos os recursos usados durante este início rápido, exclua o grupo de recursos usando o seguinte comando:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes
Conteúdo relacionado
- Gerir o Base de Dados do Azure para PostgreSQL usando o portal do Azure
- Guia de início rápido: usar Python para conectar e consultar dados no Banco de Dados do Azure para PostgreSQL
- Guia de início rápido: use o .NET (C#) para conectar e consultar dados no Banco de Dados do Azure para PostgreSQL
- Guia de início rápido: usar o idioma Go para conectar e consultar dados no Banco de Dados do Azure para PostgreSQL
- Guia de início rápido: usar PHP para conectar e consultar dados no Banco de Dados do Azure para PostgreSQL
- Guia de início rápido: ligar-se e fazer consultas utilizando a linha de comandos do Azure com o Banco de Dados do Azure para PostgreSQL
- Guia de início rápido: importar dados do Banco de Dados do Azure para PostgreSQL no Power BI