Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur du konfigurerar en utvecklingsmiljö för Azure-utveckling i Java. Sedan skapar du några Azure-resurser och ansluter till dem för att utföra vissa grundläggande uppgifter, till exempel att ladda upp en fil eller distribuera ett webbprogram. När du är klar är du redo att börja använda Azure-tjänster i dina egna Java-program.
Förutsättningar
- Ett Azure-konto. Om du inte har en få en kostnadsfri utvärderingsversion.
- Azure Cloud Shell eller Azure CLI 2.0.
- Java 8, som ingår i Azure Cloud Shell.
- Maven 3, som ingår i Azure Cloud Shell.
Konfigurera autentisering
Java-programmet behöver läsa och skapa behörigheter i din Azure-prenumeration för att köra exempelkoden i den här självstudien. Skapa ett huvudnamn för tjänsten och konfigurera programmet så att det körs med dess autentiseringsuppgifter. Tjänstens huvudnamn är ett sätt att skapa ett icke-interaktivt konto som är associerat med din identitet och som du endast beviljar de behörigheter som din app behöver för att köras.
Skapa ett huvudnamn för tjänsten med hjälp av Azure CLI 2.0och samla in utdata:
az ad sp create-for-rbac \
--name AzureJavaTest \
--role Contributor \
--scopes /subscriptions/<your-subscription-ID>
Det här kommandot ger dig ett svar i följande format:
{
"appId": "a487e0c1-82af-47d9-9a0b-af184eb87646d",
"displayName": "AzureJavaTest",
"name": "http://AzureJavaTest",
"password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
}
Konfigurera sedan miljövariablerna:
-
AZURE_SUBSCRIPTION_ID: Använd värdet id frånaz account showi Azure CLI 2.0. -
AZURE_CLIENT_ID: Använd värdet appId från utdata från ett utdata för tjänstens huvudnamn. -
AZURE_CLIENT_SECRET: Använd värdet lösenord från utdata för tjänstens huvudnamn. -
AZURE_TENANT_ID: Använd värdet klientorganisation från utdata för tjänstens huvudnamn.
Fler autentiseringsalternativ finns i Azure Identity-klientbiblioteket för Java.
Not
Microsoft rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Det autentiseringsflöde som beskrivs i den här proceduren, till exempel för databaser, cacheminnen, meddelanden eller AI-tjänster, kräver en mycket hög grad av förtroende för programmet och medför risker som inte finns i andra flöden. Använd endast det här flödet när säkrare alternativ, till exempel hanterade identiteter för lösenordslösa eller nyckellösa anslutningar, inte är genomförbara. För lokala datoråtgärder föredrar du användaridentiteter för lösenordslösa eller nyckellösa anslutningar.
Verktyg
Skapa ett nytt Maven-projekt
Not
Den här artikeln använder verktyget Maven-kompilering för att skapa och köra exempelkoden. Andra byggverktyg, till exempel Gradle, fungerar också med Azure SDK för Java.
Skapa ett Maven-projekt från kommandoraden i en ny katalog i systemet.
mkdir java-azure-test
cd java-azure-test
mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=AzureApp \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Det här steget skapar ett grundläggande Maven-projekt under katalogen testAzureApp. Lägg till följande poster i projektets pom.xml-fil för att importera biblioteken som används i exempelkoden i den här självstudien.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.azure.resourcemanager</groupId>
<artifactId>azure-resourcemanager</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
<version>12.8.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.2.1.jre8</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.33</version>
</dependency>
Lägg till en build post under elementet project på den översta nivån för att använda maven-exec-plugin- för att köra exemplen.
maven-compiler-plugin- används för att konfigurera källkoden och genererade klasser för Java 8.
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.fabrikam.App</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Skapa en virtuell Linux-dator
Skapa en ny fil med namnet App.java i projektets katalog src/main/java/com/fabrikam och klistra in följande kodblock. Uppdatera variablerna userName och sshKey med verkliga värden för datorn. Koden skapar en ny virtuell Linux-dator (VM) med namnet testLinuxVM i resursgruppen sampleResourceGroup körs i regionen USA, östra Azure.
package com.fabrikam;
import com.azure.core.credential.TokenCredential;
import com.azure.core.http.policy.HttpLogDetailLevel;
import com.azure.core.management.AzureEnvironment;
import com.azure.core.management.Region;
import com.azure.core.management.profile.AzureProfile;
import com.azure.identity.AzureAuthorityHosts;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.resourcemanager.compute.models.KnownLinuxVirtualMachineImage;
import com.azure.resourcemanager.compute.models.VirtualMachine;
import com.azure.resourcemanager.compute.models.VirtualMachineSizeTypes;
public class App {
public static void main(String[] args) {
final String userName = "YOUR_VM_USERNAME";
final String sshKey = "YOUR_PUBLIC_SSH_KEY";
try {
TokenCredential credential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
.build();
// If you don't set the tenant ID and subscription ID via environment variables,
// change to create the Azure profile with tenantId, subscriptionId, and Azure environment.
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
AzureResourceManager azureResourceManager = AzureResourceManager.configure()
.withLogLevel(HttpLogDetailLevel.BASIC)
.authenticate(credential, profile)
.withDefaultSubscription();
// Create an Ubuntu virtual machine in a new resource group.
VirtualMachine linuxVM = azureResourceManager.virtualMachines().define("testLinuxVM")
.withRegion(Region.US_EAST)
.withNewResourceGroup("sampleVmResourceGroup")
.withNewPrimaryNetwork("10.0.0.0/24")
.withPrimaryPrivateIPAddressDynamic()
.withoutPrimaryPublicIPAddress()
.withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_18_04_LTS)
.withRootUsername(userName)
.withSsh(sshKey)
.withSize(VirtualMachineSizeTypes.STANDARD_D3_V2)
.create();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
Kör exemplet från kommandoraden.
mvn compile exec:java
Du ser några REST-begäranden och svar i konsolen när SDK:n gör de underliggande anropen till Azure REST API för att konfigurera den virtuella datorn och dess resurser. När programmet är klart kontrollerar du den virtuella datorn i din prenumeration med Azure CLI 2.0.
az vm list --resource-group sampleVmResourceGroup
När du har verifierat att koden fungerade använder du CLI för att ta bort den virtuella datorn och dess resurser.
az group delete --name sampleVmResourceGroup
Distribuera en webbapp från en GitHub-lagringsplats
Ersätt huvudmetoden i App.java med följande. Uppdatera variabeln appName till ett unikt värde innan du kör koden. Den här koden distribuerar ett webbprogram från master-grenen i en offentlig GitHub-lagringsplats till en ny Azure App Service Web App- som körs på den kostnadsfria prisnivån.
public static void main(String[] args) {
try {
final String appName = "YOUR_APP_NAME";
TokenCredential credential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
.build();
// If you don't set the tenant ID and subscription ID via environment variables,
// change to create the Azure profile with tenantId, subscriptionId, and Azure environment.
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
AzureResourceManager azureResourceManager = AzureResourceManager.configure()
.withLogLevel(HttpLogDetailLevel.BASIC)
.authenticate(credential, profile)
.withDefaultSubscription();
WebApp app = azureResourceManager.webApps().define(appName)
.withRegion(Region.US_WEST2)
.withNewResourceGroup("sampleWebResourceGroup")
.withNewWindowsPlan(PricingTier.FREE_F1)
.defineSourceControl()
.withPublicGitRepository(
"https://github.com/Azure-Samples/app-service-web-java-get-started")
.withBranch("master")
.attach()
.create();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
Kör koden som innan du använder Maven.
mvn clean compile exec:java
Öppna en webbläsare som pekar på programmet med hjälp av CLI.
az webapp browse --resource-group sampleWebResourceGroup --name YOUR_APP_NAME
Ta bort webbappen och planera från din prenumeration när du har verifierat distributionen.
az group delete --name sampleWebResourceGroup
Ansluta till en Azure SQL-databas
Ersätt den aktuella huvudmetoden i App.java med följande kod. Ange verkliga värden för variablerna. Den här koden skapar en ny SQL-databas med en brandväggsregel som tillåter fjärråtkomst. Sedan ansluter koden till den med hjälp av SQL Database JBDC-drivrutinen.
public static void main(String args[]) {
// Create the db using the management libraries.
try {
TokenCredential credential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
.build();
// If you don't set the tenant ID and subscription ID via environment variables,
// change to create the Azure profile with tenantId, subscriptionId, and Azure environment.
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
AzureResourceManager azureResourceManager = AzureResourceManager.configure()
.withLogLevel(HttpLogDetailLevel.BASIC)
.authenticate(credential, profile)
.withDefaultSubscription();
final String adminUser = "YOUR_USERNAME_HERE";
final String sqlServerName = "YOUR_SERVER_NAME_HERE";
final String sqlDbName = "YOUR_DB_NAME_HERE";
final String dbPassword = "YOUR_PASSWORD_HERE";
final String firewallRuleName = "YOUR_RULE_NAME_HERE";
SqlServer sampleSQLServer = azureResourceManager.sqlServers().define(sqlServerName)
.withRegion(Region.US_EAST)
.withNewResourceGroup("sampleSqlResourceGroup")
.withAdministratorLogin(adminUser)
.withAdministratorPassword(dbPassword)
.defineFirewallRule(firewallRuleName)
.withIpAddressRange("0.0.0.0","255.255.255.255")
.attach()
.create();
SqlDatabase sampleSQLDb = sampleSQLServer.databases().define(sqlDbName).create();
// Assemble the connection string to the database.
final String domain = sampleSQLServer.fullyQualifiedDomainName();
String url = "jdbc:sqlserver://"+ domain + ":1433;" +
"database=" + sqlDbName +";" +
"user=" + adminUser+ "@" + sqlServerName + ";" +
"password=" + dbPassword + ";" +
"encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;";
// Connect to the database, create a table, and insert an entry into it.
try (Connection conn = DriverManager.getConnection(url)) {
String createTable = "CREATE TABLE CLOUD (name varchar(255), code int);";
String insertValues = "INSERT INTO CLOUD (name, code) VALUES ('Azure', 1);";
String selectValues = "SELECT * FROM CLOUD";
try (Statement createStatement = conn.createStatement()) {
createStatement.execute(createTable);
}
try (Statement insertStatement = conn.createStatement()) {
insertStatement.execute(insertValues);
}
try (Statement selectStatement = conn.createStatement();
ResultSet rst = selectStatement.executeQuery(selectValues)) {
while (rst.next()) {
System.out.println(rst.getString(1) + " " + rst.getString(2));
}
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println(e.getStackTrace().toString());
}
}
Kör exemplet från kommandoraden.
mvn clean compile exec:java
Rensa sedan resurserna med hjälp av CLI.
az group delete --name sampleSqlResourceGroup
Skriva en blob till ett nytt lagringskonto
Ersätt den aktuella huvudmetoden i App.java med följande kod. Den här koden skapar ett Azure Storage-konto. Sedan använder koden Azure Storage-biblioteken för Java för att skapa en ny textfil i molnet.
public static void main(String[] args) {
try {
TokenCredential tokenCredential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
.build();
// If you don't set the tenant ID and subscription ID via environment variables,
// change to create the Azure profile with tenantId, subscriptionId, and Azure environment.
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
AzureResourceManager azureResourceManager = AzureResourceManager.configure()
.withLogLevel(HttpLogDetailLevel.BASIC)
.authenticate(tokenCredential, profile)
.withDefaultSubscription();
// Create a new storage account.
String storageAccountName = "YOUR_STORAGE_ACCOUNT_NAME_HERE";
StorageAccount storage = azureResourceManager.storageAccounts().define(storageAccountName)
.withRegion(Region.US_WEST2)
.withNewResourceGroup("sampleStorageResourceGroup")
.create();
// Create a storage container to hold the file.
List<StorageAccountKey> keys = storage.getKeys();
PublicEndpoints endpoints = storage.endPoints();
String accountName = storage.name();
String accountKey = keys.get(0).value();
String endpoint = endpoints.primary().blob();
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
BlobServiceClient storageClient = new BlobServiceClientBuilder()
.endpoint(endpoint)
.credential(credential)
.buildClient();
// Container name must be lowercase.
BlobContainerClient blobContainerClient = storageClient.getBlobContainerClient("helloazure");
blobContainerClient.create();
// Make the container public.
blobContainerClient.setAccessPolicy(PublicAccessType.CONTAINER, null);
// Write a blob to the container.
String fileName = "helloazure.txt";
String textNew = "Hello Azure";
BlobClient blobClient = blobContainerClient.getBlobClient(fileName);
InputStream is = new ByteArrayInputStream(textNew.getBytes());
blobClient.upload(is, textNew.length());
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
Kör exemplet från kommandoraden.
mvn clean compile exec:java
Du kan bläddra efter helloazure.txt filen i ditt lagringskonto via Azure-portalen eller med Azure Storage Explorer.
Rensa lagringskontot med hjälp av CLI.
az group delete --name sampleStorageResourceGroup
Utforska fler exempel
Mer information om hur du använder Azure-hanteringsbiblioteken för Java för att hantera resurser och automatisera uppgifter finns i vår exempelkod för virtuella datorer, webbapparoch SQL-databas.
Referens- och viktig information
En referens är tillgänglig för alla paket.
Få hjälp och ge feedback
Skicka frågor till communityn på Stack Overflow. Rapportera buggar och öppna problem mot Azure SDK för Java på GitHub-lagringsplats.