Spring Boot starter section
Improve the documentation to explain the necessary steps to create a custom Spring Boot starter. In particular, provide more details regarding naming conventions. Closes gh-2537 See gh-2927
This commit is contained in:
parent
78769444d2
commit
960d6eadba
|
|
@ -3631,12 +3631,19 @@ public class MyTest {
|
||||||
|
|
||||||
|
|
||||||
[[boot-features-developing-auto-configuration]]
|
[[boot-features-developing-auto-configuration]]
|
||||||
== Developing auto-configuration and using conditions
|
== Creating your own auto-configuration
|
||||||
If you work in a company that develops shared libraries, or if you work on an open-source
|
If you work in a company that develops shared libraries, or if you work on an open-source
|
||||||
or commercial library, you might want to develop your own auto-configuration.
|
or commercial library, you might want to develop your own auto-configuration.
|
||||||
Auto-configuration classes can be bundled in external jars and still be picked-up by
|
Auto-configuration classes can be bundled in external jars and still be picked-up by
|
||||||
Spring Boot.
|
Spring Boot.
|
||||||
|
|
||||||
|
Auto-configuration can be associated to a "starter" that provides the auto-configuration
|
||||||
|
code as well as the typical libraries that you would use with it. We will fist cover what
|
||||||
|
you need to know to build your own auto-configuration and we will move on to the
|
||||||
|
<<boot-features-custom-starter,typical steps required to create a custom starter>>.
|
||||||
|
|
||||||
|
TIP: A https://github.com/snicoll-demos/spring-boot-master-auto-configuration[demo project]
|
||||||
|
is available to showcase how you can create a starter step by step.
|
||||||
|
|
||||||
|
|
||||||
[[boot-features-understanding-auto-configured-beans]]
|
[[boot-features-understanding-auto-configured-beans]]
|
||||||
|
|
@ -3745,6 +3752,66 @@ The `@ConditionalOnExpression` annotation allows configuration to be included ba
|
||||||
result of a {spring-reference}/#expressions[SpEL expression].
|
result of a {spring-reference}/#expressions[SpEL expression].
|
||||||
|
|
||||||
|
|
||||||
|
[[boot-features-custom-starter]]
|
||||||
|
=== Creating your own starter
|
||||||
|
|
||||||
|
A full Spring Boot starter for a library may contain the following components:
|
||||||
|
|
||||||
|
* The `autoconfigure` module that contains the auto-configuration code.
|
||||||
|
* The `starter` module that provides a dependency to the autoconfigure module as well as
|
||||||
|
the library and any additional dependencies that are typically useful . In a nutshell,
|
||||||
|
adding the starter should be enough to start using that library
|
||||||
|
|
||||||
|
TIP: You may combine the auto-configuration code and the dependency management in a single
|
||||||
|
module if you don't need to separate those two concerns.
|
||||||
|
|
||||||
|
[[boot-features-custom-starter-naming]]
|
||||||
|
==== Naming
|
||||||
|
|
||||||
|
Please make sure to provide a proper namespace for your starter. Do not start your module
|
||||||
|
names with `spring-boot`, even if you are using a different Maven groupId. We may offer an
|
||||||
|
official support for the thing you're auto-configuring in the future.
|
||||||
|
|
||||||
|
Here is a rule of thumb. Let's assume that you are creating a starter for "acme", name the
|
||||||
|
auto-configure module `acme-spring-boot-autoconfigure` and the starter
|
||||||
|
`acme-spring-boot-starter`. If you only have one module combining the two, use
|
||||||
|
`acme-spring-boot-starter`.
|
||||||
|
|
||||||
|
Besides, if your starter provides configuration keys, use a proper namespace for them. In
|
||||||
|
particular, do not include your keys in the namespaces that Spring Boot uses (e.g.
|
||||||
|
`server`, `management`, `spring`, etc). These are "ours" and we may improve/modify them
|
||||||
|
in the future in such a way it could break your things.
|
||||||
|
|
||||||
|
Make sure to
|
||||||
|
<<appendix-configuration-metadata#configuration-metadata-annotation-processor,trigger
|
||||||
|
meta-data generation>> so that IDE assistance is available for your keys as well. You
|
||||||
|
may want to review the generated meta-data (`META-INF/spring-configuration-metadata.json`)
|
||||||
|
to make sure your keys are properly documented.
|
||||||
|
|
||||||
|
[[boot-features-custom-starter-module-autoconfigure]]
|
||||||
|
=== Autoconfigure module
|
||||||
|
|
||||||
|
The autoconfigure module contains everything that is necessary to get started with the
|
||||||
|
library. It may also contain configuration keys definition (`@ConfigurationProperties`)
|
||||||
|
and any callback interface that can be used to further customize how the components are
|
||||||
|
initialized.
|
||||||
|
|
||||||
|
TIP: You should mark the dependencies to the library as optional so that you can include
|
||||||
|
the autoconfigure module in your projects more easily. If you do it that way, the library
|
||||||
|
won't be provided and boot will backoff by default.
|
||||||
|
|
||||||
|
[[boot-features-custom-starter-module-starter]]
|
||||||
|
=== Starter module
|
||||||
|
|
||||||
|
The starter is an empty jar, really. Its only purpose is to provide the necessary
|
||||||
|
dependencies to work with the library; see it as an opinionated view of what is required
|
||||||
|
to get started.
|
||||||
|
|
||||||
|
Do not make assumptions about the project in which your starter is added . If the library
|
||||||
|
you are auto-configuring typically requires other starters, mention them as well. Providing
|
||||||
|
a proper set of _default_ dependencies may be hard if the number of optional dependencies
|
||||||
|
is high as you should avoid bringing unnecessary dependencies for a typical usage of the
|
||||||
|
library.
|
||||||
|
|
||||||
[[boot-features-websockets]]
|
[[boot-features-websockets]]
|
||||||
== WebSockets
|
== WebSockets
|
||||||
|
|
|
||||||
|
|
@ -296,7 +296,8 @@ search dependencies by name. For example, with the appropriate Eclipse or STS pl
|
||||||
installed, you can simply hit `ctrl-space` in the POM editor and type
|
installed, you can simply hit `ctrl-space` in the POM editor and type
|
||||||
"`spring-boot-starter`" for a complete list.
|
"`spring-boot-starter`" for a complete list.
|
||||||
|
|
||||||
Third party starters should not start with `spring-boot` as it is reserved for
|
As explained in the <<spring-boot-features#boot-features-custom-starter,Creating your own starter>>
|
||||||
|
section, third party starters should not start with `spring-boot` as it is reserved for
|
||||||
official Spring Boot artifacts. A third-party starter for `acme` will be typically named
|
official Spring Boot artifacts. A third-party starter for `acme` will be typically named
|
||||||
`acme-spring-boot-starter`.
|
`acme-spring-boot-starter`.
|
||||||
****
|
****
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue