Kom igång med molnutveckling med Java på Azure

Den här artikeln beskriver hur du ställer in en utvecklingsmiljö för Azure-utveckling i Java. Sedan skapar du några Azure-resurser och ansluter till dem för att utföra några grundläggande uppgifter, som att ladda upp en fil eller distribuera en webbapp. När du är klar är du redo att börja använda Azure-tjänster i dina egna Java-program.

Förutsättningar

Konfigurera autentisering

Java-appen behöver behörigheter för att läsa och skapa 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

Vilket 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 AZURE_SUBSCRIPTION_IDaz account show från i Azure CLI 2.0.
  • AZURE_CLIENT_ID: Använd AZURE_CLIENT_ID utdata från utdata för tjänstens huvudnamn.
  • AZURE_CLIENT_SECRET: Använd AZURE_CLIENT_SECRET utdata för tjänstens huvudnamn.
  • AZURE_TENANT_ID: Använd AZURE_TENANT_ID utdata för tjänstens huvudnamn.

Fler autentiseringsalternativ finns i Azure Identity-klientbiblioteket för Java.

Verktyg

Skapa ett nytt Maven-projekt

Anteckning

I den här artikeln används Maven-byggverktyget 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 filpom.xml 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>

Lägg till build en post under elementet på den översta nivån för att använda projectbuild att köra exemplen.

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <mainClass>com.fabrikam.AzureApp</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

Installera Azure Toolkit för IntelliJ

Azure Toolkit är nödvändigt om du planerar att distribuera webbappar eller API:er programmatiskt. En snabbstart med Azure Web Apps finns i Azure Toolkit for IntelliJ. Den har också en omfattande SDK-referensbok inbäddad för all Azure-utveckling med Java SDK. Följande steg sammanfattar installationsprocessen.

  1. Välj menyn Arkiv och välj sedan Inställningar.
  2. Välj Bläddra bland lagringsplatsenoch sök sedan i Azure och installera Azure Toolkit för Intellij.
  3. Starta om IntelliJ.
  4. Öppna referensboken från Verktyg – Azure – Azure > SDK-referensbok

Azure SDK-referensbok i IntelliJ

Installera Azure Toolkit for Eclipse

Azure Toolkit är nödvändigt om du planerar att distribuera webbappar eller API:er programmatiskt. För närvarande används den inte för andra typer av utveckling. Följande steg sammanfattar installationsprocessen. En snabbstart finns i Azure Toolkit for Eclipse.

  1. Välj menyn Hjälp och välj sedan Installera ny programvara.
  2. I rutan Arbeta med anger och väljer du Retur.
  3. Markera kryssrutan bredvid Azure Toolkit för Java. Avmarkera kryssrutan för Kontakta alla uppdateringsplatser under installationen för att hitta nödvändig programvara. Välj sedan Nästa.

Skapa en virtuell Linux-dator

Skapa en ny fil med namnet AzureApp.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 som sampleResourceGroup körs i Azure-regionen USA, östra.

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.EnvironmentCredentialBuilder;
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 AzureApp {

    public static void main(String[] args) {

        final String userName = "YOUR_VM_USERNAME";
        final String sshKey = "YOUR_PUBLIC_SSH_KEY";

        try {
            TokenCredential credential = new EnvironmentCredentialBuilder()
                    .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_16_04_LTS)
                    .withRootUsername(userName)
                    .withSsh(sshKey)
                    .withUnmanagedDisks()
                    .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 verifierar du den virtuella datorn i din prenumeration med Azure CLI 2.0.

az vm list --resource-group sampleVmResourceGroup

När du har kontrollerat att koden fungerade kan du använda 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 main-metoden AzureApp.java i med följande. Uppdatera appName variabeln till ett unikt värde innan du kör koden. Koden distribuerar en webbapp från grenen master på en offentlig GitHub-lagringsplats till en ny master som körs på den kostnadsfria prisnivån.

    public static void main(String[] args) {
        try {

            final String appName = "YOUR_APP_NAME";

            TokenCredential credential = new EnvironmentCredentialBuilder()
                    .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 planen 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 AzureApp.java main-metoden i med följande kod. Ange verkliga värden för variablerna. Den här koden skapar en 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 EnvironmentCredentialBuilder()
                    .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.
            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";
            Statement createStatement = conn.createStatement();
            createStatement.execute(createTable);
            Statement insertStatement = conn.createStatement();
            insertStatement.execute(insertValues);
            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

Skriv en blob till ett nytt lagringskonto

Ersätt den aktuella AzureApp.java main-metoden i med följande kod. Den här koden skapar ett Azure Storage-konto. Koden använder sedan Azure Storage för Java för att skapa en ny textfil i molnet.

    public static void main(String[] args) {

        try {
            TokenCredential tokenCredential = new EnvironmentCredentialBuilder()
                    .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 i ditt lagringskonto via Azure Portal 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,webbappar och SQL databas.

Referens och viktig information

En referens finns för alla paket.

Få hjälp och ge feedback

Publicera frågor i communityn på Stack Overflow. Rapportera buggar och öppna problem mot Azure SDK för Java på lagringsplatsen GitHub .