* Migrate Structure * Insert explicit ids for headers * Remove unnecessary asciidoc attributes * Copy default antora files * Fix indentation for all pages * Split files * Generate a default navigation * Remove includes * Fix cross references * Enable Section Summary TOC for small pages * WIP * Antora migration --------- Co-authored-by: Marcin Grzejszczak <mgrzejszczak@vmware.com>
198 lines
6.4 KiB
Plaintext
198 lines
6.4 KiB
Plaintext
[[quickstart]]
|
|
= Quick Start
|
|
|
|
This quick start walks through using both the server and the client of Spring Cloud Config Server.
|
|
|
|
First, start the server, as follows:
|
|
|
|
----
|
|
$ cd spring-cloud-config-server
|
|
$ ../mvnw spring-boot:run
|
|
----
|
|
|
|
The server is a Spring Boot application, so you can run it from your IDE if you prefer to do so (the main class is `ConfigServerApplication`).
|
|
|
|
Next try out a client, as follows:
|
|
|
|
----
|
|
$ curl localhost:8888/foo/development
|
|
{
|
|
"name": "foo",
|
|
"profiles": [
|
|
"development"
|
|
]
|
|
....
|
|
"propertySources": [
|
|
{
|
|
"name": "https://github.com/spring-cloud-samples/config-repo/foo-development.properties",
|
|
"source": {
|
|
"bar": "spam",
|
|
"foo": "from foo development"
|
|
}
|
|
},
|
|
{
|
|
"name": "https://github.com/spring-cloud-samples/config-repo/foo.properties",
|
|
"source": {
|
|
"foo": "from foo props",
|
|
"democonfigclient.message": "hello spring io"
|
|
}
|
|
},
|
|
....
|
|
----
|
|
|
|
The default strategy for locating property sources is to clone a git repository (at `spring.cloud.config.server.git.uri`) and use it to initialize a mini `SpringApplication`.
|
|
The mini-application's `Environment` is used to enumerate property sources and publish them at a JSON endpoint.
|
|
|
|
The HTTP service has resources in the following form:
|
|
|
|
----
|
|
/\{application}/\{profile}[/\{label}]
|
|
/\{application}-\{profile}.yml
|
|
/\{label}/\{application}-\{profile}.yml
|
|
/\{application}-\{profile}.properties
|
|
/\{label}/\{application}-\{profile}.properties
|
|
----
|
|
|
|
For example:
|
|
|
|
----
|
|
curl localhost:8888/foo/development
|
|
curl localhost:8888/foo/development/master
|
|
curl localhost:8888/foo/development,db/master
|
|
curl localhost:8888/foo-development.yml
|
|
curl localhost:8888/foo-db.properties
|
|
curl localhost:8888/master/foo-db.properties
|
|
----
|
|
|
|
where `application` is injected as the `spring.config.name` in the `SpringApplication` (what is normally `application` in a regular Spring Boot app), `profile` is an active profile (or comma-separated list of properties), and `label` is an optional git label (defaults to `master`.)
|
|
|
|
Spring Cloud Config Server pulls configuration for remote clients from various sources. The following example gets configuration from a git repository (which must be provided), as shown in the following example:
|
|
|
|
[source,yaml]
|
|
----
|
|
spring:
|
|
cloud:
|
|
config:
|
|
server:
|
|
git:
|
|
uri: https://github.com/spring-cloud-samples/config-repo
|
|
----
|
|
|
|
Other sources are any JDBC compatible database, Subversion, Hashicorp Vault, Credhub and local filesystems.
|
|
|
|
[[client-side-usage]]
|
|
== Client Side Usage
|
|
|
|
To use these features in an application, you can build it as a Spring Boot application that depends on spring-cloud-config-client (for an example, see the test cases for the config-client or the sample application).
|
|
The most convenient way to add the dependency is with a Spring Boot starter `org.springframework.cloud:spring-cloud-starter-config`.
|
|
There is also a parent pom and BOM (`spring-cloud-starter-parent`) for Maven users and a Spring IO version management properties file for Gradle and Spring CLI users. The following example shows a typical Maven configuration:
|
|
|
|
[source,xml,indent=0]
|
|
.pom.xml
|
|
----
|
|
<parent>
|
|
<groupId>org.springframework.boot</groupId>
|
|
<artifactId>spring-boot-starter-parent</artifactId>
|
|
<version>{spring-boot-docs-version}</version>
|
|
<relativePath /> <!-- lookup parent from repository -->
|
|
</parent>
|
|
|
|
<dependencyManagement>
|
|
<dependencies>
|
|
<dependency>
|
|
<groupId>org.springframework.cloud</groupId>
|
|
<artifactId>spring-cloud-dependencies</artifactId>
|
|
<version>{spring-cloud-version}</version>
|
|
<type>pom</type>
|
|
<scope>import</scope>
|
|
</dependency>
|
|
</dependencies>
|
|
</dependencyManagement>
|
|
|
|
<dependencies>
|
|
<dependency>
|
|
<groupId>org.springframework.cloud</groupId>
|
|
<artifactId>spring-cloud-starter-config</artifactId>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.springframework.boot</groupId>
|
|
<artifactId>spring-boot-starter-test</artifactId>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
</dependencies>
|
|
|
|
<build>
|
|
<plugins>
|
|
<plugin>
|
|
<groupId>org.springframework.boot</groupId>
|
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
|
</plugin>
|
|
</plugins>
|
|
</build>
|
|
|
|
<!-- repositories also needed for snapshots and milestones -->
|
|
----
|
|
|
|
Now you can create a standard Spring Boot application, such as the following HTTP server:
|
|
|
|
----
|
|
@SpringBootApplication
|
|
@RestController
|
|
public class Application {
|
|
|
|
@RequestMapping("/")
|
|
public String home() {
|
|
return "Hello World!";
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
SpringApplication.run(Application.class, args);
|
|
}
|
|
|
|
}
|
|
----
|
|
|
|
When this HTTP server runs, it picks up the external configuration from the default local config server (if it is running) on port 8888.
|
|
To modify the startup behavior, you can change the location of the config server by using `application.properties` as shown in the following example:
|
|
|
|
----
|
|
spring.config.import=optional:configserver:http://myconfigserver.com
|
|
----
|
|
|
|
By default, if no application name is set, `application` will be used. To modify the name, the following property can be added to the `application.properties` file:
|
|
|
|
----
|
|
spring.application.name: myapp
|
|
----
|
|
|
|
NOTE: When setting the property `${spring.application.name}` do not prefix your app name with the reserved word `application-` to prevent issues resolving the correct property source.
|
|
|
|
The Config Server properties show up in the `/env` endpoint as a high-priority property source, as shown in the following example.
|
|
|
|
----
|
|
$ curl localhost:8080/env
|
|
{
|
|
"activeProfiles": [],
|
|
{
|
|
"name": "servletContextInitParams",
|
|
"properties": {}
|
|
},
|
|
{
|
|
"name": "configserver:https://github.com/spring-cloud-samples/config-repo/foo.properties",
|
|
"properties": {
|
|
"foo": {
|
|
"value": "bar",
|
|
"origin": "Config Server https://github.com/spring-cloud-samples/config-repo/foo.properties:2:12"
|
|
}
|
|
}
|
|
},
|
|
...
|
|
}
|
|
----
|
|
|
|
A property source called `configserver:<URL of remote repository>/<file name>` contains the `foo` property with a value of `bar`.
|
|
|
|
NOTE: The URL in the property source name is the git repository, not the config server URL.
|
|
|
|
WARNING: If you use Spring Cloud Config Client, you need to set the `spring.config.import` property in order to bind to Config Server. You can read more about it https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#config-data-import[in the Spring Cloud Config Reference Guide].
|