From 8f97ee08f7630ab694e132bc80cfa290cb9bb0eb Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 2 Jun 2021 10:17:12 +0200 Subject: [PATCH] Make sure that Spring Boot versions are available Closes gh-1214 --- initializr-service-sample/README.adoc | 22 ++++++++++++++++--- .../sample/service/ServiceApplication.java | 14 +++++++++++- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/initializr-service-sample/README.adoc b/initializr-service-sample/README.adoc index c6cc93dd..3672bcbb 100644 --- a/initializr-service-sample/README.adoc +++ b/initializr-service-sample/README.adoc @@ -43,8 +43,24 @@ If you have the `spring` CLI installed, you can also use it as follows: Finally, you can configure your IDE to point to another service instance. == Configuration -The configuration in `application.yml` is very simple with a single `web` dependency that -brings `spring-boot-starter-web`. You can experiment by adding more dependencies or other -elements that drive how projects are generated. +There are two main customizations to the sample. + +=== Metadata Update Strategy +First, `ServiceApplication` has a dedicated strategy to update the metadata with the available Spring Boot versions from Sagan (`spring.io`). +When you issue your first request, you should see something like the following: + +[indent=0] +---- +Fetching Spring Boot metadata from https://spring.io/project_metadata/spring-boot +---- + +On further request, you won't see this log entry as the content is cached. +There are no expiration set, so the available versions won't change until you restart the service. + +=== Basic Metadata +The configuration in `application.yml` is very simple with a single `web` dependency that brings `spring-boot-starter-web`. +The default `groupId` for generated projects has been customized to `org.acme`. + +You can experiment by adding more dependencies or other elements that drive how projects are generated. diff --git a/initializr-service-sample/src/main/java/sample/service/ServiceApplication.java b/initializr-service-sample/src/main/java/sample/service/ServiceApplication.java index 0d2653d2..068b7a5b 100644 --- a/initializr-service-sample/src/main/java/sample/service/ServiceApplication.java +++ b/initializr-service-sample/src/main/java/sample/service/ServiceApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,9 +16,14 @@ package sample.service; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.spring.initializr.web.support.SaganInitializrMetadataUpdateStrategy; + import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; import org.springframework.scheduling.annotation.EnableAsync; /** @@ -35,4 +40,11 @@ public class ServiceApplication { SpringApplication.run(ServiceApplication.class, args); } + // This bean opt-in for fetching available Spring Boot versions from Sagan (spring.io) + @Bean + SaganInitializrMetadataUpdateStrategy saganInitializrMetadataUpdateStrategy(RestTemplateBuilder restTemplateBuilder, + ObjectMapper objectMapper) { + return new SaganInitializrMetadataUpdateStrategy(restTemplateBuilder.build(), objectMapper); + } + }