= Service sample

:docs: https://docs.spring.io/initializr/docs/current-SNAPSHOT/reference/html

This sample demonstrates how you can create your own service easily as described in the
{docs}/#create-instance[reference documentation].

== Running the service
You can start the service from the command line:

[indent=0]
----
    $ ../mvnw spring-boot:run
----

Or, better yet, run the `ServiceApplication` main method from your favourite IDE.

== Generating a project
If you go to `localhost:8080` with your browser, you'll get a json document that describes
the capabilities of the service. There are several ways you can generate a project.

If you have `HTTPie` installed, try the following:

[indent=0]
----
    $ http :8080
----

If you prefer to use `cURL`, try this instead:

[indent=0]
----
    $ curl localhost:8080
----

If you have the `spring` CLI installed, you can also use it as follows:

[indent=0]
----
    $ spring init --target http://localhost:8080 --list
----

Finally, you can configure your IDE to point to another service instance.

== Configuration
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.


