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.
Config Server for Spring tillhandahåller en central plats för att göra konfigurationsdata tillgängliga för flera program. I den här artikeln lär du dig att ansluta en app som finns i Azure Container Apps till en Java Config Server for Spring-instans.
Komponenten Config Server for Spring Java använder en GitHub-lagringsplats som källa för konfigurationsinställningar. Konfigurationsvärden görs tillgängliga för containerappen via en bindning mellan komponenten och containerappen. När värdena ändras på konfigurationsservern flödar de automatiskt till ditt program, allt utan att du behöver kompilera om eller distribuera om programmet.
I den här självstudien får du lära dig att:
- Skapa en konfigurationsserver för Spring Java-komponenten
- Binda konfigurationsservern för Spring till din containerapp
- Observera konfigurationsvärden före och efter anslutning av konfigurationsservern till ditt program
- Kryptera och dekryptera konfigurationsvärden med en symmetrisk nyckel
Viktigt!
I den här självstudien används tjänster som kan påverka din Azure-faktura. Om du bestämmer dig för att följa med steg för steg ska du ta bort resurserna i den här artikeln för att undvika oväntad fakturering.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Om du inte redan har en kan du skapa en kostnadsfritt.
- Azure CLI.
Att tänka på
När du kör i Config Server for Spring i Azure Container Apps bör du vara medveten om följande information:
| Artikel | Förklaring |
|---|---|
| Definitionsområde | Konfigurationsservern för Spring körs i samma miljö som den anslutna containerappen. |
| Skalning | För att upprätthålla en enda sanningskälla skalas inte Config Server for Spring. Skalningsegenskaperna minReplicas och maxReplicas är båda inställda på 1. |
| Resurser | Containerresursallokeringen för Config Server for Spring är fast, antalet CPU-kärnor är 0,5 och minnesstorleken är 1Gi. |
| Prissättning | Config Server for Spring-faktureringen faller under förbrukningsbaserad prissättning. Resurser som används av hanterade Java-komponenter debiteras enligt aktiva/inaktiva priser. Du kan ta bort komponenter som inte längre används för att stoppa faktureringen. |
| Bindande | Containerappen ansluter till en Config Server for Spring via en bindning. Bindningen matar in konfigurationer i miljövariabler för containerappar. När en bindning har upprättats kan containerappen läsa konfigurationsvärden från miljövariabler. |
Ställ in
Innan du börjar arbeta med Config Server for Spring måste du först skapa nödvändiga resurser.
Kör följande kommandon för att skapa resursgruppen och Container Apps-miljön.
Skapa variabler som stöd för programkonfigurationen. Dessa värden tillhandahålls för dig i den här lektionen.
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export JAVA_COMPONENT_NAME=configserver export APP_NAME=my-config-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-config-client:latest" export URI="https://github.com/Azure-Samples/azure-spring-cloud-config-java-aca.git"Olika beskrivning LOCATIONDen Plats i Azure-regionen där du skapar din containerapp och Java-komponent. ENVIRONMENTMiljönamnet för Azure Container Apps för ditt demoprogram. RESOURCE_GROUPNamnet på Azure-resursgruppen för demoprogrammet. JAVA_COMPONENT_NAMENamnet på Java-komponenten som skapats för containerappen. I det här fallet skapar du en Config Server for Spring Java-komponent. IMAGEContaineravbildningen som används i containerappen. URIDu kan ersätta URI:n med git-lagringsplatsens URL, om den är privat, lägga till relaterade autentiseringskonfigurationer som spring.cloud.config.server.git.usernameochspring.cloud.config.server.git.password.Logga in på Azure med Azure CLI.
az loginSkapa en resursgrupp.
az group create --name $RESOURCE_GROUP --location $LOCATIONSkapa din containerappmiljö.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Den här miljön används för att vara värd för både komponenten Config Server for Spring java och din containerapp.
Skapa komponenten Config Server for Spring Java
Nu när du har en Container Apps-miljö kan du skapa din containerapp och binda den till en Config Server for Spring java-komponent. När du binder containerappen synkroniseras konfigurationsvärden automatiskt från komponenten Config Server till ditt program.
Skapa komponenten Config Server for Spring Java.
az containerapp env java-component config-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 1 \ --max-replicas 1 \ --configuration spring.cloud.config.server.git.uri=$URIUppdatera komponenten Config Server for Spring Java.
az containerapp env java-component config-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 2 \ --max-replicas 2 \ --configuration spring.cloud.config.server.git.uri=$URI spring.cloud.config.server.git.refresh-rate=60Här berättar du för komponenten var du hittar lagringsplatsen som innehåller konfigurationsinformationen
urivia egenskapen . Egenskapenrefresh-rateanger hur ofta Container Apps ska söka efter ändringar i Git-lagringsplatsen.
Binda din containerapp till komponenten Config Server for Spring Java
Skapa containerappen som använder konfigurationsdata.
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080 \ --query properties.configuration.ingress.fqdnDet här kommandot returnerar URL:en för din containerapp som använder konfigurationsdata. Kopiera URL:en till en textredigerare så att du kan använda den i ett kommande steg.
Om du besöker din app i en webbläsare är det
connectTimeoutvärde som returneras standardvärdet0.Bind till konfigurationsservern för Spring.
Nu när containerappen och konfigurationsservern har skapats binder du dem tillsammans med kommandot till containerappen
update.az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $JAVA_COMPONENT_NAMEParametern
--bind $JAVA_COMPONENT_NAMEskapar länken mellan containerappen och konfigurationskomponenten.
När containerappen och komponenten Config Server har bundits samman synkroniseras konfigurationsändringar automatiskt till containerappen.
När du besöker appens URL igen är värdet connectTimeout för nu 10000. Det här värdet kommer från Git-lagringsplatsen i variabeln $URI som ursprungligen angavs som källa för konfigurationskomponenten. Mer specifikt hämtas det här värdet från connectionTimeout egenskapen i lagringsplatsens application.yml-fil .
Bindningsbegäran matar in konfigurationsinställningen i programmet som miljövariabler. Dessa värden är nu tillgängliga för programkoden som ska användas vid hämtning av konfigurationsinställningar från konfigurationsservern.
I det här fallet är följande miljövariabler tillgängliga för programmet:
SPRING_CLOUD_CONFIG_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CLOUD_CONFIG_COMPONENT_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CONFIG_IMPORT=optional:configserver:$SPRING_CLOUD_CONFIG_URI
Om du vill anpassa din egen SPRING_CONFIG_IMPORTkan du referera till miljövariabeln SPRING_CLOUD_CONFIG_COMPONENT_URI , till exempel kan du åsidosätta med kommandoradsargument, till exempel Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true.
Du kan också ta bort en bindning från ditt program.
(Valfritt) Avbind din containerapp från komponenten Config Server for Spring Java
Om du vill ta bort en bindning från en containerapp använder du alternativet --unbind .
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
När du besöker appens URL igen ändras värdet connectTimeout för tillbaka till 0.
Rensa resurser
De resurser som skapas i den här självstudien påverkar din Azure-faktura. Om du inte ska använda dessa tjänster på lång sikt kör du följande kommando för att ta bort allt som skapats i den här självstudien.
az group delete --resource-group $RESOURCE_GROUP
Konfigurationsalternativ
Kommandot az containerapp update använder parametern --configuration för att styra hur konfigurationsservern för Spring konfigureras. Du kan använda flera parametrar samtidigt så länge de avgränsas med ett blanksteg. Mer information finns i Spring Cloud Config Server.
I följande tabell beskrivs de olika tillgängliga konfigurationsvärdena för Git-serverdelen:
| Name | beskrivning |
|---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
URI för fjärrlagringsplats. |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
Användarnamn för autentisering med fjärrlagringsplats. |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
Lösenord för autentisering med fjärrlagringsplats. |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
Sökvägar som ska användas i en lokal arbetskopia. Som standard söker endast roten. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
Flagga som anger att lagringsplatsen ska framtvinga pull-hämtning. Om truetar du bort eventuella lokala ändringar och tar från fjärrlagringsplatsen. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
Standardetiketten som används för Git är huvudetiketten. Om du inte anger spring.cloud.config.server.git.default-label och en gren med namnet main inte finns försöker konfigurationsservern som standard också checka ut en gren med namnet master. Om du vill inaktivera beteendet för reservgrenen kan du ange spring.cloud.config.server.git.tryMasterBranch till false. |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
Konfigurationsservern försöker som standard checka ut en gren med namnet master. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
Du kan inaktivera konfigurationsserverns validering av Git-serverns TLS/SSL-certifikat genom att ange git.skipSslValidation egenskapen till true. |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
Flagga som anger att lagringsplatsen ska klonas vid start, inte på begäran. Leder vanligtvis till långsammare start men snabbare första fråga. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
Timeout i sekunder för att hämta HTTP- eller SSH-anslutning, om tillämpligt. Standardvärdet är 5 sekunder. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Hur ofta konfigurationsservern hämtar uppdaterade konfigurationsdata från din Git-serverdel. |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
Giltig privat SSH-nyckel. Måste anges om ignore-local-ssh-settings är true och Git-URI:n är i SSH-format. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
Giltig SSH-värdnyckel. Måste anges om host-key-algorithm det också är inställt. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
En av ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384eller ecdsa-sha2-nistp521. Måste anges om host-key det också är inställt. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true eller false. Om falseignorerar du fel med värdnyckeln. |
spring.cloud.config.server.git.repos.{repoName} |
URI för fjärrlagringsplats. |
spring.cloud.config.server.git.repos.{repoName}.pattern |
Mönsterformatet är en kommaavgränsad lista med {application}/{profile} namn med jokertecken. Om {application}/{profile} inte matchar något av mönstren använder den standard-URI:n som definierats under. |
I följande lista beskrivs vanliga konfigurationer:
Loggningsrelaterade konfigurationer:
logging.level.*logging.group.*- Andra konfigurationer under
logging.*namnområdet bör förbjudas, till exempel bör det vara förbjudet att skriva loggfiler med hjälplogging.fileav.
spring.cloud.config.server.overrides- Extra karta för en egenskapskälla som ska skickas till alla klienter villkorslöst.
spring.cloud.config.override-none- Du kan ändra prioriteten för alla åsidosättningar i klienten till mer som standardvärden, låta program ange sina egna värden i miljövariabler eller Systemegenskaper genom att ange
spring.cloud.config.override-none=trueflaggan – standardvärdet är falskt – på fjärrlagringsplatsen.
- Du kan ändra prioriteten för alla åsidosättningar i klienten till mer som standardvärden, låta program ange sina egna värden i miljövariabler eller Systemegenskaper genom att ange
spring.cloud.config.allow-override- Om du aktiverar konfigurationens första bootstrap kan du tillåta att klientprogram åsidosätter konfigurationen från konfigurationsservern genom att placera två egenskaper i programkonfigurationen som kommer från konfigurationsservern.
spring.cloud.config.server.health.*- Du kan konfigurera hälsoindikatorn för att kontrollera fler program tillsammans med anpassade profiler och anpassade etiketter.
spring.cloud.config.server.accept-empty- Du kan ange
spring.cloud.config.server.accept-emptytillfalseså att servern returnerar en HTTP-status404om programmet inte hittas. Som standard är den här flaggan inställd påtrue.
- Du kan ange
Kryptering och dekryptering (symmetrisk):
encrypt.key- Bekvämt när du använder en symmetrisk nyckel eftersom det är ett enda egenskapsvärde att konfigurera.
spring.cloud.config.server.encrypt.enabled- Ange den här egenskapen till
falseför att inaktivera dekryptering på serversidan.
- Ange den här egenskapen till
Uppdatera
Tjänster som använder egenskaper måste känna till en ändring innan den sker. Standardmeddelandemetoden för Config Server for Spring innebär att uppdateringshändelsen utlöses manuellt, till exempel en uppdatering efter anrop https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh, vilket kanske inte är möjligt om det finns många appinstanser.
I stället kan du automatiskt uppdatera värden från Config Server genom att låta konfigurationsklienten söka efter ändringar baserat på en intern uppdatering. Använd följande steg för att automatiskt uppdatera värden från Config Server:
Registrera en schemalagd aktivitet för att uppdatera kontexten i ett visst intervall, enligt följande exempel:
@Configuration @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class}) @EnableScheduling public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer { @Value("${spring.cloud.config.refresh-interval:60}") private long refreshInterval; @Value("${spring.cloud.config.auto-refresh:false}") private boolean autoRefresh; private final RefreshEndpoint refreshEndpoint; public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) { this.refreshEndpoint = refreshEndpoint; } @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { if (autoRefresh) { // set minimal refresh interval to 5 seconds refreshInterval = Math.max(refreshInterval, 5); scheduledTaskRegistrar.addFixedRateTask(refreshEndpoint::refresh, Duration.ofSeconds(refreshInterval)); } } }Aktivera
autorefreshoch ange lämpligt uppdateringsintervall i filen application.yml . I följande exempel söker klienten efter en konfigurationsändring var 60:e sekund, vilket är det minsta värde som du kan ange för ett uppdateringsintervall.Som standard
autorefreshär inställt påfalseochrefresh-intervalär inställt på 60 sekunder.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refreshLägg till
@RefreshScopekoden. I följande exempel uppdateras variabelnconnectTimeoutautomatiskt var 60:e sekund:@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
Kryptering och dekryptering med en symmetrisk nyckel
Dekryptering på serversidan
Som standard är kryptering på serversidan aktiverat. Använd följande steg för att aktivera dekryptering i ditt program:
Lägg till den krypterade egenskapen i .properties-filen på git-lagringsplatsen.
Filen bör likna följande exempel:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282fUppdatera komponenten Config Server for Spring Java för att använda Git-lagringsplatsen som har den krypterade egenskapen och ange krypteringsnyckeln.
Innan du kör följande kommando ersätter du platshållarna som omges av
<>med dina värden.az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> encrypt.key=randomKey
Dekryptering på klientsidan
Du kan använda dekryptering på klientsidan av egenskaper genom att följa stegen:
Lägg till den krypterade egenskapen i .properties-filen på git-lagringsplatsen.
Uppdatera komponenten Config Server for Spring Java för att använda Git-lagringsplatsen som har den krypterade egenskapen och inaktivera dekryptering på serversidan.
Innan du kör följande kommando ersätter du platshållarna som omges av
<>med dina värden.az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> spring.cloud.config.server.encrypt.enabled=falseLägg till dekrypteringsnyckeln
ENCRYPT_KEY=randomKeysom en miljövariabel i klientappen.Alternativt, om du inkluderar
spring-cloud-starter-bootstrappåclasspath, eller somspring.cloud.bootstrap.enabled=trueen systemegenskap, anger duencrypt.keyibootstrap.properties.Innan du kör följande kommando ersätter du platshållarna som omges av
<>med dina värden.az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"encrypt: key: somerandomkey