Øvelse – Kode et Java-program, der bruger hemmeligheder
Du skal kode et Java-webprogram ved hjælp af Spring Boot, der opretter forbindelse til en database.
Af sikkerhedsmæssige årsager skal du sikre denne databaseadgang i fremtiden. Men lad os først oprette programinfrastrukturen og derefter konfigurere Java-programmet til brug.
Opret programinfrastrukturen
I denne øvelse skal du bruge Azure CLI til at oprette følgende ressourcer:
- En Azure-ressourcegruppe, der indeholder alle ressourcerne til dit program.
- En PostgreSQL-databaseserver.
- En Azure Spring Apps-klynge og et Spring Boot-program, der kører i denne klynge.
Du skal angive nogle miljøvariabler i starten af scriptet, der skal være entydige på tværs af Azure.
Du skal også angive din lokale IP-adresse for at få adgang til databasen fra din lokale computer. Denne IP-adresse skal være en IPv4-adresse. Hvis du ikke kender din lokale IP-adresse, kan du gå til følgende websted: https://www.whatismyip.com/
Angiv følgende miljøvariabler:
AZ_RESOURCE_GROUP=<YOUR_UNIQUE_RESOURCE_GROUP_NAME>
AZ_DATABASE_USERNAME=<YOUR_POSTGRESQL_USERNAME>
AZ_DATABASE_PASSWORD=<YOUR_POSTGRESQL_PASSWORD>
AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
Når disse miljøvariabler er angivet, kan du køre følgende kommando for at oprette ressourcerne:
AZ_LOCATION=eastus
# Must be all lowercase
AZ_SPRING_CLOUD=spring-${AZ_RESOURCE_GROUP,,}
AZ_DATABASE_NAME=pgsql-${AZ_RESOURCE_GROUP}
AZ_DATABASE_USERNAME=${AZ_DATABASE_USERNAME}
az group create \
--name $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION
Denne kommando kan tage flere minutter at fuldføre.
az postgres server create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME \
--location $AZ_LOCATION \
--sku-name B_Gen5_1 \
--storage-size 5120 \
--admin-user $AZ_DATABASE_USERNAME \
--admin-password $AZ_DATABASE_PASSWORD
az postgres server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME-database-allow-local-ip \
--server $AZ_DATABASE_NAME \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS
az postgres server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME-database-allow-azure-ip \
--server $AZ_DATABASE_NAME \
--start-ip-address 0.0.0.0 \
--end-ip-address 0.0.0.0
az postgres db create \
--resource-group $AZ_RESOURCE_GROUP \
--name demo \
--server-name $AZ_DATABASE_NAME
Denne kommando kan tage flere minutter at fuldføre.
az extension add --name spring
az spring create \
--name $AZ_SPRING_CLOUD \
--resource-group $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--sku Basic
Denne kommando kan tage flere minutter at fuldføre.
az spring app create \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--runtime-version Java_11 \
--assign-endpoint true
Det tager lidt tid at køre disse scripts, så du kan lade dem køre i baggrunden og begynde at kode programmet i mellemtiden.
Konfigurer Java-programmet
Hent programskeletet fra gitHub-lageret https://github.com/Azure-Samples/manage-secrets-in-java-applications ved hjælp af kommandoen git clone:
git clone https://github.com/Azure-Samples/manage-secrets-in-java-applications.git
Dette program bruger JPA for forårsdata til at få adgang til databasen. Du kan se grænsefladen til CRUD-lageret:
package com.example.demo;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ItemRepository extends CrudRepository<Item, Integer> {
}
Data, der gemmes i databasen, vises derefter på internettet ved hjælp af en Spring MVC REST Controller:
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ItemController {
private final ItemRepository itemRepository;
public ItemController(ItemRepository itemRepository) {
this.itemRepository = itemRepository;
}
@GetMapping("/")
String welcome() {
return "Here are all the database items: " + itemRepository.findAll();
}
}
Disse data indsættes i databasen på starttidspunktet ved hjælp af filen src/main/resources/data.sql:
insert into item (details) values ('This is a item from the database');
Du kan føje flere linjer til denne fil, hvis du vil have flere data, eller hvis du vil tilpasse den.
Hvis du vil have adgang til databasen, skal du konfigurere src/main/resources/application.properties-filen:
logging.level.org.springframework.jdbc.core=DEBUG
spring.datasource.url=jdbc:postgresql://${azureDatabaseName}.postgres.database.azure.com:5432/demo
spring.datasource.username=${azureDatabaseUsername}@${azureDatabaseName}
spring.datasource.password=${azureDatabasePassword}
spring.sql.init.mode=always
Denne konfigurationsfil har tre variabler, der skal konfigureres:
-
${azureDatabaseName}er navnet på den PostgreSQL-database, der blev konfigureret tidligere i miljøvariablenAZ_DATABASE_NAME. Skrivecho $AZ_DATABASE_NAMEfor at se den. -
${azureDatabaseUsername}er navnet på det databasebrugernavn, der blev konfigureret tidligere i miljøvariablenAZ_DATABASE_USERNAME. Skrivecho $AZ_DATABASE_USERNAMEfor at se den. -
${azureDatabasePassword}er navnet på den adgangskode til databasen, der blev konfigureret tidligere i miljøvariablenAZ_DATABASE_PASSWORD. Skrivecho $AZ_DATABASE_PASSWORDfor at se den.
Som vi så i det forrige undermodul, er det en dårlig praksis at hard-code disse værdier i programkildekoden. Men hvis du vil teste programmet, kan du skrive dem midlertidigt og køre programmet:
./mvnw spring-boot:run
Du kan læse databaseindholdet ved at få adgang til Spring MVC Controller ved hjælp af følgende kommando eller ved hjælp af en webbrowser:
curl http://localhost:8080
Udrul Java-programmet på Azure
Hvis du vil installere programmet, skal du først pakke det som en Jar-fil:
./mvnw clean package
Denne kommando opretter en eksekverbar Jar-fil i mappen target, som du installerer ved hjælp af Kommandolinjegrænsefladen i Azure:
az spring app deploy \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--artifact-path target/*.jar
Hvis der opstår fejl, kan du se programlogfilerne ved at skrive følgende kommando:
az spring app logs \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application
Programmet vil derefter være tilgængeligt i cloudmiljøet, og du kan få adgang til dets data ved hjælp af en cURL-kommando:
curl https://$AZ_SPRING_CLOUD-application.azuremicroservices.io
# Expected output:
#
# Here are all the database items: [Secret{Id=1, details='This is a item from the database'}]
#
Tillykke! Du har oprettet et Java-program, der opretter forbindelse til en database! Nu skal du sikre legitimationsoplysningerne for databasen i de næste enheder.