Een Spring-app implementeren in App Service met MySQL
Notitie
Voor Spring-toepassingen wordt u aangeraden Azure Spring Apps te gebruiken. U kunt echter nog steeds Azure-app Service als bestemming gebruiken. Zie De juiste Azure-services voor uw Java-toepassingen kiezen voor meer informatie.
In deze zelfstudie worden de ontwikkeling, configuratie, implementatie, probleemoplossing en schaling van Java-web-apps in App Service Linux stapsgewijs besproken.
In deze zelfstudie wordt gebruikgemaakt van de populaire Spring PetClinic-voorbeeld-app. In dit onderwerp test u een HSQLDB-versie van de app lokaal en implementeert u deze vervolgens in Azure-app Service. Daarna configureert en implementeert u een versie die gebruikmaakt van Azure Database for MySQL. Ten slotte leert u hoe u toegang krijgt tot de app-logboeken en uitschaalt door het aantal werkrollen dat uw app uitvoert te verhogen.
Vereisten
Het voorbeeld ophalen
Om aan de slag te gaan met de voorbeeld-app moet u de bronopslagplaats klonen en voorbereiden met de volgende opdrachten.
git clone https://github.com/spring-petclinic/spring-framework-petclinic.git
cd spring-framework-petclinic
Het HSQLDB-voorbeeld ontwikkelen en lokaal uitvoeren
Eerst testen we het voorbeeld lokaal met behulp van HSQLDB als de database.
Bouw de HSQLDB-versie van de voorbeeld-app.
mvn package
Stel vervolgens de TOMCAT_HOME-omgevingsvariabele in op de locatie van uw Tomcat-installatie.
export TOMCAT_HOME=<Tomcat install directory>
Werk vervolgens pom.xml bestand bij voor het implementeren van het WAR-bestand. Voeg de volgende XML toe als een onderliggend element van het bestaande element <plugins>
. Wijzig indien nodig 1.9.11
de huidige versie van de Cargo Maven 3-invoegtoepassing.
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven3-plugin</artifactId>
<version>1.9.11</version>
<configuration>
<container>
<containerId>tomcat9x</containerId>
<type>installed</type>
<home>${TOMCAT_HOME}</home>
</container>
<configuration>
<type>existing</type>
<home>${TOMCAT_HOME}</home>
</configuration>
<deployables>
<deployable>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<type>war</type>
<properties>
<context>/</context>
</properties>
</deployable>
</deployables>
</configuration>
</plugin>
Als deze configuratie tot stand is gebracht, kunt u de app lokaal implementeren in Tomcat.
mvn cargo:deploy
Start vervolgens Tomcat.
${TOMCAT_HOME}/bin/catalina.sh run
U kunt nu in uw browser navigeren naar http://localhost:8080
om de actieve app te bekijken en te zien hoe deze werkt. Wanneer u klaar bent, selecteert u Ctrl+C bij de Bash-prompt om Tomcat te stoppen.
Implementeren naar Azure App Service
Nu u hebt gezien hoe de app lokaal wordt uitgevoerd, implementeren we deze in Azure.
Stel eerst de volgende omgevingsvariabelen in. Voor REGION
, gebruik West US 2
of andere regio's die u hier kunt vinden.
export RESOURCEGROUP_NAME=<resource group>
export WEBAPP_NAME=<web app>
export WEBAPP_PLAN_NAME=${WEBAPP_NAME}-appservice-plan
export REGION=<region>
Maven gebruikt deze waarden om de Azure-resources te maken met de namen die u opgeeft. Met behulp van omgevingsvariabelen kunt u uw accountgeheimen uit uw projectbestanden houden.
Werk vervolgens het bestand pom.xml bij om Maven te configureren voor een Azure-implementatie. Voeg de volgende XML-code toe na het <plugin>
-element dat u eerder hebt toegevoegd. Wijzig zo nodig 2.5.0
in de huidige versie van de Maven-invoegtoepassing voor Azure App Service.
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<runtime>
<os>Linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>TOMCAT 9.0</webContainer>
</runtime>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.war</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
Meld u daarna aan bij Azure.
az login
Implementeer vervolgens de app in App Service Linux.
mvn azure-webapp:deploy
U kunt nu naar https://<app-name>.azurewebsites.net
navigeren (nadat u <app-name>
hebt vervangen) om de actieve app te bekijken.
Azure Database for MySQL instellen
Vervolgens gaan we MySQL gebruiken in plaats van HSQLDB. We maken een MySQL-serverinstantie in Azure en voegen een database toe. Vervolgens werken we de app-configuratie bij met de verbindingsgegevens van de nieuwe database.
Stel eerst de volgende omgevingsvariabelen in zodat u deze in latere stappen kunt gebruiken.
export MYSQL_SERVER_NAME=<server>
export MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_NAME}.mysql.database.azure.com
export MYSQL_SERVER_ADMIN_LOGIN_NAME=<admin>
export MYSQL_SERVER_ADMIN_PASSWORD=<password>
export MYSQL_DATABASE_NAME=<database>
export DOLLAR=\$
Maak daarna de databaseserver en initialiseer deze. Gebruik az mysql up voor de eerste configuratie. Gebruik vervolgens az mysql server configuration set om de time-out voor de verbinding te verhogen en de tijdzone voor de server in te stellen.
az extension add --name db-up
az mysql up \
--resource-group ${RESOURCEGROUP_NAME} \
--server-name ${MYSQL_SERVER_NAME} \
--database-name ${MYSQL_DATABASE_NAME} \
--admin-user ${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
--admin-password ${MYSQL_SERVER_ADMIN_PASSWORD}
az mysql server configuration set --name wait_timeout \
--resource-group ${RESOURCEGROUP_NAME} \
--server ${MYSQL_SERVER_NAME} --value 2147483
az mysql server configuration set --name time_zone \
--resource-group ${RESOURCEGROUP_NAME} \
--server ${MYSQL_SERVER_NAME} --value=-8:00
Gebruik vervolgens de MySQL CLI om verbinding te maken met uw database in Azure.
mysql -u ${MYSQL_SERVER_ADMIN_LOGIN_NAME}@${MYSQL_SERVER_NAME} \
-h ${MYSQL_SERVER_FULL_NAME} -P 3306 -p
Voer bij de MySQL CLI-prompt de volgende opdracht uit om de database te controleren met dezelfde waarde die u eerder hebt opgegeven voor de MYSQL_DATABASE_NAME
omgevingsvariabele.
show databases;
MySQL is nu klaar voor gebruik.
De app voor MySQL configureren
Vervolgens voegen we de verbindingsgegevens toe aan de MySQL-versie van de app en implementeren we deze vervolgens in App Service.
Werk het pom.xml-bestand bij om MySQL de actieve configuratie te maken. Verwijder het <activation>
element uit het H2-profiel en plaats het in het MySQL-profiel, zoals hier wordt weergegeven. In de rest van het fragment wordt de bestaande configuratie weergegeven. De omgevingsvariabelen die u eerder hebt ingesteld, worden door Maven gebruikt voor het configureren van uw MySQL-toegang.
<profile>
<id>MySQL</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<db.script>mysql</db.script>
<jpa.database>MYSQL</jpa.database>
<jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
<jdbc.url>jdbc:mysql://${DOLLAR}{MYSQL_SERVER_FULL_NAME}:3306/${DOLLAR}{MYSQL_DATABASE_NAME}?useUnicode=true</jdbc.url>
<jdbc.username>${DOLLAR}{MYSQL_SERVER_ADMIN_LOGIN_NAME}@${DOLLAR}{MYSQL_SERVER_FULL_NAME}</jdbc.username>
<jdbc.password>${DOLLAR}{MYSQL_SERVER_ADMIN_PASSWORD}</jdbc.password>
</properties>
...
</profile>
Werk vervolgens het bestand pom.xml bij om Maven te configureren voor een Azure-implementatie en voor gebruik van MySQL. Voeg de volgende XML-code toe na het <plugin>
-element dat u eerder hebt toegevoegd. Wijzig zo nodig 2.5.0
in de huidige versie van de Maven-invoegtoepassing voor Azure App Service.
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<runtime>
<os>Linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>TOMCAT 9.0</webContainer>
</runtime>
<appSettings>
<property>
<name>MYSQL_SERVER_FULL_NAME</name>
<value>${MYSQL_SERVER_FULL_NAME}</value>
</property>
<property>
<name>MYSQL_SERVER_ADMIN_LOGIN_NAME</name>
<value>${MYSQL_SERVER_ADMIN_LOGIN_NAME}</value>
</property>
<property>
<name>MYSQL_SERVER_ADMIN_PASSWORD</name>
<value>${MYSQL_SERVER_ADMIN_PASSWORD}</value>
</property>
<property>
<name>MYSQL_DATABASE_NAME</name>
<value>${MYSQL_DATABASE_NAME}</value>
</property>
</appSettings>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.war</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
Vervolgens ontwikkelt u de app en test u deze lokaal door de app met Tomcat te implementeren en uit te voeren.
mvn package
mvn cargo:deploy
${TOMCAT_HOME}/bin/catalina.sh run
U kunt de app nu lokaal weergeven op http://localhost:8080
. De app heeft hetzelfde uiterlijk en gedrag als voorheen, maar maakt gebruik van Azure Database for MySQL in plaats van HSQLDB. Wanneer u klaar bent, selecteert u Ctrl+C bij de Bash-prompt om Tomcat te stoppen.
Implementeer ten slotte de app in App Service.
mvn azure-webapp:deploy
U kunt nu naar https://<app-name>.azurewebsites.net
navigeren om de actieve app te bekijken met behulp van App Service en Azure Database for MySQL.
Toegang verkrijgen tot de app-logboeken
Als u problemen moet oplossen, kunt u de logboeken van de app bekijken. Gebruik de volgende opdracht om de externe logboekstroom op uw lokale computer te openen.
az webapp log tail --name ${WEBAPP_NAME} \
--resource-group ${RESOURCEGROUP_NAME}
Wanneer u klaar bent met het weergeven van de logboeken, selecteert u Ctrl+C om de stroom te stoppen.
De logboekstroom is ook beschikbaar op https://<app-name>.scm.azurewebsites.net/api/logstream
.
Uitschalen
Als u meer verkeer naar uw app mogelijk wilt maken, kunt u uitschalen naar meerdere instanties met behulp van de volgende opdracht.
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group ${RESOURCEGROUP_NAME}
Gefeliciteerd U hebt een Java-web-app ontwikkeld en uitgeschaald met behulp van Spring Framework, JSP, Spring Data, Hibernate, JDBC, App Service Linux en Azure Database for MySQL.
Resources opschonen
In de voorgaande secties hebt u Azure-resources in een resourcegroep gemaakt. Als u denkt dat u deze resources niet meer gaat gebruiken, verwijdert u de resourcegroep door de volgende opdracht uit te voeren.
az group delete --name ${RESOURCEGROUP_NAME}
Volgende stappen
Bekijk vervolgens de andere configuratie- en CI/CD-opties die voor Java met App Service beschikbaar zijn.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub Issues geleidelijk uitfaseren als het feedbackmechanisme voor inhoud. Het wordt vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor