Skip to content

Commit efc9978

Browse files
committed
Document use case of splitting auto-configuration and starter
Closes gh-20686
1 parent 9f37f16 commit efc9978

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7117,13 +7117,22 @@ include::{test-examples}/autoconfigure/UserServiceAutoConfigurationTests.java[ta
71177117

71187118
[[boot-features-custom-starter]]
71197119
=== Creating Your Own Starter
7120-
A full Spring Boot starter for a library may contain the following components:
7120+
A typical Spring Boot starter contains code to auto-configure and customize the infrastructure of a given technology, let's call that "acme".
7121+
To make it easily extensible, a number of configuration keys in a dedicated namespace can be exposed to the environment.
7122+
Finally, a single "starter" dependency is provided to help users get started as easily as possible.
71217123

7122-
* The `autoconfigure` module that contains the auto-configuration code.
7123-
* The `starter` module that provides a dependency to the `autoconfigure` module as well as the library and any additional dependencies that are typically useful.
7124+
Concretely, a custom starter can contain the following:
7125+
7126+
* The `autoconfigure` module that contains the auto-configuration code for "acme".
7127+
* The `starter` module that provides a dependency to the `autoconfigure` module as well as "acme" and any additional dependencies that are typically useful.
71247128
In a nutshell, adding the starter should provide everything needed to start using that library.
71257129

7126-
TIP: You may combine the auto-configuration code and the dependency management in a single module if you do not need to separate those two concerns.
7130+
This separation in two modules is in no way necessary.
7131+
If "acme" has several flavours, options or optional features, then it is better to separate the auto-configuration as you can clearly express the fact some features are optional.
7132+
Besides, you have the ability to craft a starter that provides an opinion about those optional dependencies.
7133+
At the same time, others can rely only on the `autoconfigure` module and craft their own starter with different opinions.
7134+
7135+
If the auto-configuration is relatively straightforward and does not have optional feature, merging the two modules in the starter is definitely an option.
71277136

71287137

71297138

@@ -7134,7 +7143,7 @@ Do not start your module names with `spring-boot`, even if you use a different M
71347143
We may offer official support for the thing you auto-configure in the future.
71357144

71367145
As a rule of thumb, you should name a combined module after the starter.
7137-
For example, assume that you are creating a starter for "acme" and that you name the auto-configure module `acme-spring-boot-autoconfigure` and the starter `acme-spring-boot-starter`.
7146+
For example, assume that you are creating a starter for "acme" and that you name the auto-configure module `acme-spring-boot` and the starter `acme-spring-boot-starter`.
71387147
If you only have one module that combines the two, name it `acme-spring-boot-starter`.
71397148

71407149

0 commit comments

Comments
 (0)